闭包
(什么是闭包):
函数作为参数被传递(函数套函数)
函数作为返回值被传递(函数套函数)
闭包的作用:
闭包引用的变量不会被销毁,也就是可以访问
闭包可以实现局部变量,避免全局变量污染
总结:
闭包也是变量作用域的特殊情况:
在变量定义的地方就开始了查找赋值,而不是在函数执行的地方开始查找赋值
函数作为返回值被传递
总结:
被闭包引用的局部变量,不会被销毁
闭包可以实现局部变量,避免全局变量污染
function fun() {
var a = 100;
return function() {
console.log(a);
a++;
}
}
var f = fun();
f();// 100 函数作为返回值被调用
f();// 101
闭包中的自由变量的值在函数定义的时候查找,不是函数执行的查找
function fun() {
var a = 100;
return function() {
console.log(a);
a++;
}
}
var a = 20
var f = fun();
f();// 100 闭包中的自由变量在定义的时候查找,不是在执行的时候查找
f();// 101
函数作为参数被传递
总结:
闭包中执行的变量的查找在函数定义的地方
function print(fn) {
let a = 100;
fn();
// 这里函数被当成了参数传递了过来,所以在这里执行了函数,形成了闭包
// 所以不能在这里进行赋值,不能赋值100,
}
let a = 50; // 找到了这里
function fn() {
console.log(a);
// 因为 fn函数定义在了这里
// a在这个函数中是自由变量
// 所以去上一层查找a,发现a=50,所以 print(fn) === 50
}
print(fn)// 50
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!