Когда мы передаем функцию в качестве параметра другой функции, мы можем вызвать ее в любой момент внутри содержащей функции, как если бы функция обратного вызова была определена внутри содержащей функции. Это значит, что по сути функция обратного вызова является замыканием. Замыкания имеют доступ к области видимости содержащей функции, а значит могут использовать любые переменные, определенные внутри содержащей функции.
function boo() {
alert(a);
}
function foo(callback) {
var a = 1;
callback();
}
foo(boo);
Почему выдает ошибку, ведь
Замыкания имеют доступ к области видимости содержащей функции, а значит могут использовать любые переменные, определенные внутри содержащей функции.
Ответ
Внутри boo (колбэка) видны а и b, но не видно c
function callingFunction(callback) {
var c = 4;
callback(3);
}
function containingFunction() {
var b = 2;
function boo(a) {
console.log(a + b); // 5
console.log(typeof c); // undefined
}
callingFunction(boo);
}
containingFunction();
console.log(typeof boo); // for @AntonShchyrov
Комментариев нет:
Отправить комментарий