Можно ли вызвать функцию, определенную внутри замыкания? - PullRequest
1 голос
/ 01 ноября 2009

В следующем коде я могу позвонить в базу. Также где-то еще я читал "JavaScript имеет область действия на уровне функций". Я знаю, я где-то путаюсь. Кто-нибудь может заставить меня понять, пожалуйста?

/* An anonymous function used as a closure. */
var baz;
(function() {
    var foo = 10;
    var bar = 2;
    baz = function() { 
        return foo * bar; 
    };
})();

baz(); // baz can access foo and bar, even though it is executed outside of the
       // anonymous function

.

Ответы [ 2 ]

4 голосов
/ 01 ноября 2009

Переменная baz объявляется вне анонимной функции (даже если она на самом деле не определена, пока вы не используете выражение функции для присвоения ей значения). Это помещает его область за пределы указанной функции.

foo и bar объявлены внутри анонимной функции, которая ограничивает их область действия этой функцией. Функция, назначенная для baz, может получить к ним доступ, потому что они находились в области действия при создании.

0 голосов
/ 01 ноября 2009

Дэвид объяснил это довольно хорошо. Вещи, которые находятся в области действия, где вы определяете baz, по-прежнему доступны после возврата вашей анонимной функции.

Подробнее о затворах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...