闭包最直接的定义:函数可以记住并访问所在的词法作用域时,就产生了闭包,即使这个函数是在当前词法作用域之外执行的。
如下代码:
function foo() {
var a = 1;
function bar() {
console.log(a);
}
bar();
}
foo(); // 1
kyle给的一个定义,首先给人的第一感觉就是,这不就是在说作用域的查找规则吗?因为就算一个初学者不懂闭包,依然能理解这种结果,原因很简单,因为bar
函数是嵌套在foo
函数中。确切来说,这并不算是闭包。这种作用域的查找规则只是闭包的一部分。
真正的闭包应该像下面的代码一样:
function foo() {
var a = 1;
function bar() {
console.log(a);
}
return bar;
}
let baz = foo();
baz(); // 1
// 嗨,这就是闭包的威力
原文地址:https://www.cnblogs.com/wljqds/p/11279792.html
时间: 2024-10-08 04:18:53