Жестокий тест. В практике практически не применимо (извините за тавтологию). Нужно только для спортивного интереса.
С первого раза у меня вышло: You've got 4 answers wrong (#2, #3, #8, #9). Со второго все поправил. |
Не ответил на 5 (не заметил вызов функции) и на 14 (с чего-то решил, что переменной с именем undefined быть не может). Такие тесты, вообще говоря, скучны -- сидишь, компилятором работаешь.
По поводу применимости/неприменимости: в экзамене Zend на сертифицированного PHP-программиста много подобных вопросов (на знание PHP, разумеется), он тоже, скажете, туфта? :) |
Цитата:
|
Знание языка, очевидно, на котором пишешь. Мне щас трудно вспомнить конкретные примеры, но некоторые баги я бы исправлял в несколько раз дольше, если бы не знал многих тонкостей. Если бы вообще исправил. А уж выяснение, почему твой код не работает в сочетании со сторонним, это вообще песня.
|
8 из 14, стыд мне и позор. Два, причем, по невнимательности.
Спасибо, отличный тест, теперь я знаю, что еще нужно подтянуть. |
Цитата:
Представим себе конструкцию: var myEngine = function(){ // инициализируем что-нибудь нужное arguments.callee.myMethod = function(e){ // сделать что-нибудь полезное } } myEngine.myMethod = function(){ myEngine(); // инициализация myEngine.myMethod.apply(this, arguments); // к этому моменту myEngine.myMethod будет ссылаться уже на новую функцию } Т.е., в итоге получаем, что инициализация происходит неявно и один раз. Наверняка же такую же вещь можно сделать поизящнее :) |
Цитата:
(function(){ // 1 return typeof arguments; })(); ну как бы да, надо знать, что arguments - не массив и добавить в него чего-то и отправить в следующую функцию так сходу не получиться. Но зачем знать его тип? Один раз пишем toArray и запоминаем, что arguments это вам не Array var f = function g(){ return 23; }; // 2 typeof g(); (function(x){ // 3 delete x; return x; })(1); var y = 1, x = y = typeof x; // 4 x; да, полезно знать, что присваивание выполняется справа налево (function f(f){ // 5 return typeof f(); })(function(){ return 1; }); у параметров приоритет перед названием функции? Ну может иногда пригодиться var foo = { // 6 bar: function() { return this.baz; }, baz: 1 }; (function(){ return typeof arguments[0](); })(foo.bar); теряется контекст (своими словами)? Пишем один раз bind и запоминмаем, что контекст может теряться var foo = { // 7 bar: function(){ return this.baz; }, baz: 1 } typeof (f = foo.bar)(); var f = (function f(){ return "1"; }, function g(){ return 2; })(); // 8 typeof f; var x = 1; // 9 if (function f(){}) { x += typeof f; } x; да, полезно знать, как переменные в булевский тип преобразовываются и что происходит при конкатенации строки и числа var x = [typeof x, typeof y][1]; // 10 typeof typeof x; (function(foo){ // 11 return typeof foo.bar; })({ foo: { bar: 1 } }); это просто на внимательность (function f(){ // 12 function f(){ return 1; } return f(); function f(){ return 2; } })(); если в функции тонна вложенных функций, то это какбэ символизирует function f(){ return f; } // 13 new f() instanceof f; интересно, можно подменить возвращаемый объект... хотя пока не вижу применения with (function(x, undefined){}) length; // 14 ну и еще полезно знать, что функция - тип данных, бывают функции-литералы и что возвращает typeof (из того, что нужно для прохождения этого теста) кроме того, если не знаешь, как что-то работает, это ж легко можно проверить итого, я насчитал где-то 4 практических вопроса. А вы? --- про копание в чужом коде: в идеале нужно знать все про язык, потому что все, что ты не знаешь может быть использовано против тебя везде :) А если серьезно, то я затрудняюсь с более реальным списком для этого случая. Ничего в голову не приходит... subzey, а можно это как-то поподробнее и с цветными картинками, а то я не уверен, что я правильно понимаю сказанное? (с) |
> интересно, можно подменить возвращаемый объект... хотя пока не вижу применения
синглетон |
Цитата:
|
убедили, 5 из 14 вопросов :)
|
Часовой пояс GMT +3, время: 12:27. |