10 февраля 2010, 18:33 более 5-и месяцев назад
JavaScript викторина от perfectionkills.com
С утра твитор порадовал интересной викториной.
Немного подумав над ней, оказалось что решил я её без ошибок \m/, в отличии от многих других ;) (если бы на время, то наверное бы слил)…
По просьбам трудящихся, небольшие объяснения (в комментариях к викторине их можно частями найти)
Немного подумав над ней, оказалось что решил я её без ошибок \m/, в отличии от многих других ;) (если бы на время, то наверное бы слил)…
По просьбам трудящихся, небольшие объяснения (в комментариях к викторине их можно частями найти)
(function(){ return typeof arguments; })();
Вернёт object, потому что arguments всегда задана, и выводит все переменные которые приходят в функциюvar f = function g(){ return 23; }; typeof g();
Получим ошибку, фугкция g() не объявлена. Если запустить f() получим «number»(function(x){ delete x; return x; })(1);
Небольшой подвох ;) Delete внутри функций не работает ;) Ответ 1var y = 1, x = y = typeof x; x;
Объявление в «колоне» идёт слева на право, получаем в итоге строку «undefined»(function f(f){ return typeof f(); })(function(){ return 1; });
функция выполняется вконце, возвращает 1, она же идёт в начало аргументом функции f(), и тип 1 — «number»var foo = { bar: function() { return this.baz; }, baz: 1 }; (function(){ return typeof arguments[0](); })(foo.bar);
Есть объект foo с методом bar, и функция которой в качестве аргумента передаём наш метод. Почему в итоге не «function»? this в обжекте ;) Лол! ок!var foo = { bar: function(){ return this.baz; }, baz: 1 } typeof (f = foo.bar)();
А ну как конструкция, гибкость? :) смотрим вышеvar f = (function f(){ return "1"; }, function g(){ return 2; })(); typeof f;
исполняется последняя в списке функция g() — потому «number»var x = 1; if (function f(){}) { x += typeof f; } x;
Опять функция в условии (смотри 2), в итоге получаем «1undefined»var x = [typeof x, typeof y][1]; typeof typeof x;
типоф от типоф всегда стринг ;)))(function(foo){ return typeof foo.bar; })({ foo: { bar: 1 } });
у нас просто получилось foo.foo.bar = 1, обжект в обжекте — масло масляное, потому «undefined»(function f(){ function f(){ return 1; } return f(); function f(){ return 2; } })();
Последняя объявленная нижняя, потому получаем 2 %)function f(){ return f; } new f() instanceof f;
инстансоф буллевый оператор, и итог функции f() не может быть в «движении» функции f.with (function(x, undefined){}) length;
оператор with поиска находит оба аргумента, получаем 2 %)