//闭包实例代码
function fn1() {
let a = 1;
function fn2() {
a++;
console.log(a);
}
console.log(a,'a')
}
fn1();
执行结果: 1 'a'
现在思考怎么调用里面的fn2函数呢?
答案是:
//闭包实例代码
function fn1() {
let a = 1;
function fn2() {
a++;
console.log(a);
}
console.log(a,'a')
return fn2 //将fn2返回出去 然后用字段来接收
}
let a = fn1() // 用a来接收fn1执行后的结果fn2函数体
a() // 执行fn2,得到里面的执行结果
当然也可以直接在return的时候就执行:
现在尝试多次调用a()这个函数:
结果是一直增加的
原因:
执行两次 a()
后结果增加,是因为 fn2
函数中的变量 a
是一个闭包,它在 fn1
函数被调用时被创建并初始化为1,并且可以在 fn2
函数中被修改和使用。
第一次调用 a()
时,a
的值会递增为2,并输出2。第二次调用时,a
的值再次递增为3,并输出3。
这是因为每次调用 a()
时,都会访问外部函数 fn1
中的 a
变量,并且可以修改它的值。由于 a
变量是一个闭包,所以其值在不同的函数调用之间是保持不变的。
需要注意的是,在实际开发中,可能需要谨慎地使用闭包,以免出现意外的副作用或内存泄漏问题