<rmcreative>

RSS

Небольшой тест на понимание 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

  1. №1434
    CTAPbIu_MABP
    CTAPbIu_MABP 01 апр. 2009 г., 15:15:18

    ошибся во втором. думал что a==b

  2. №1435
    xzirrow
    xzirrow 01 апр. 2009 г., 21:47:36

    Супер примеры. у меня с натяжкой 1.5 . Но хотя бы знаю почему оно так как оно показывает :), хотя и ошибся :) а вот 3-е вообще выбило, особенно после второго. Получается что function a(x) { code... }, тоже самое что a = function a(x) { etc... } ?

  3. №1436
    Sam
    Sam 01 апр. 2009 г., 22:27:47

    xzirrow

    Выходит, что так… я тут тоже ошибся.

  4. №1438
    Octane
    Octane 02 апр. 2009 г., 22:40:07

    Кстати, 2-й пример поразному выполняется в JScript и JavaScript. Internet Explorer делегирует функцию «a», а другие браузеры выведут сообщение о том, что переменная «a» не определена.

    Получается что function a(x) { code... }, тоже самое что a = function a(x) { etc... }

    Только в IE, проверьте на следующем коде:

    alert(a);
    var a = function a() {
     // some code
    };
    alert(a);

    IE в обоих случаях выведет строковое представление функции, а другие браузеры в первом alert'е выдадут undefined.

  5. №9836
    Алёна
    Алёна 07 июня 2015 г., 22:24:47

    последний вопрос. здесь зависит от того используется 'use strict' mode или нет.

    т.к. если используется, то this будет передаваться так как и привязан call'ом. а если нет, то в этом случае this это window. пс: долго не могла понять в чем дело)

  6. №9983
    Маргарита
    Маргарита 05 сент. 2015 г., 19:03:08

    Предпоследний тоже от 'use strict' зависит.

    А про 2-ой пример и IE хорошо написано в learn.javascript.ru/named-function-expression

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.