一个开发人员问他在某个地方听到的问题,他说:
闭包允许函数
- 在定义函数时访问范围内的外部变量
- 在调用函数时访问范围内的外部变量
醇>
答案是定义函数的时候。我想绕过我的脑袋:
我的问题是:如果只能在调用闭包时控制日志,那么在定义时闭包是否可以访问作用域中的外部变量?我想看一些证明这一点的代码。
第二个问题是:如果闭包可以访问范围内的外部变量,那么这会给你带来什么好处以及它为何重要?
答案 0 :(得分:2)
function makeCallback() {
var foo = 'one';
return function () {
alert(foo);
};
}
function bar(callback) {
var foo = 'two';
callback();
}
bar(makeCallback());
这个是差异的重点。如果该函数可以从它调用的范围中访问变量,则会警告"两个"。这称为dynamic scoping。但是由于Javascript使用词法范围,它实际上会警告"一个"。