Небольшой тест на понимание JavaScript
31 марта 2009
Дмитрий Барановский предложил небольшой тест на понимание замыканий и областей видимости в JavaScript.
Предлагается ответить не выполняя кода, что выведет браузер.
if (!("a" in window)) { var a = 1; } alert(a);
var b = function a(x) { x && a(--x); }; alert(a);
function a(x) { return x * 2; } var a; alert(a);
function b(x, y, a) { arguments[2] = 10; alert(a); } b(1, 2, 3);
function a() { alert(this); } a.call(null);
У меня вышло 3/5. Ещё учится и учиться…
Комментарии RSS по email OK
ошибся во втором. думал что a==b
Супер примеры. у меня с натяжкой 1.5 . Но хотя бы знаю почему оно так как оно показывает :), хотя и ошибся :) а вот 3-е вообще выбило, особенно после второго. Получается что function a(x) { code... }, тоже самое что a = function a(x) { etc... } ?
xzirrow
Выходит, что так… я тут тоже ошибся.
Кстати, 2-й пример поразному выполняется в JScript и JavaScript. Internet Explorer делегирует функцию «a», а другие браузеры выведут сообщение о том, что переменная «a» не определена.
Только в IE, проверьте на следующем коде:
IE в обоих случаях выведет строковое представление функции, а другие браузеры в первом alert'е выдадут undefined.
последний вопрос. здесь зависит от того используется 'use strict' mode или нет.
т.к. если используется, то this будет передаваться так как и привязан call'ом. а если нет, то в этом случае this это window. пс: долго не могла понять в чем дело)
Предпоследний тоже от 'use strict' зависит.
А про 2-ой пример и IE хорошо написано в learn.javascript.ru/named-function-expression