#javascript
Когда мы передаем функцию в качестве параметра другой функции, мы можем вызвать ее в любой момент внутри содержащей функции, как если бы функция обратного вызова была определена внутри содержащей функции. Это значит, что по сути функция обратного вызова является замыканием. Замыкания имеют доступ к области видимости содержащей функции, а значит могут использовать любые переменные, определенные внутри содержащей функции. function boo() { alert(a); } function foo(callback) { var a = 1; callback(); } foo(boo); Почему выдает ошибку, ведь Замыкания имеют доступ к области видимости содержащей функции, а значит могут использовать любые переменные, определенные внутри содержащей функции.
Ответы
Ответ 1
Внутри 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Ответ 2
Замыкания имеют доступ к области видимости не в момент вызова, а в момент создания. Это раз. Далее - функции обратного вызова замыканиями не являются. Это указатель на объект функция. А как создавался этот объект вызывающую сторону не интересует
Комментариев нет:
Отправить комментарий