什么是JavaScript闭包以及JS闭包的用法

闭包 (什么是闭包): 函数作为参数被传递(函数套函数) 函数作为返回值被传递(函数套函数) 闭包的作用: 闭包引用的变量不会被销毁,也就是可以访问 闭包可以实现局部变量,避免全局...

闭包

(什么是闭包):

函数作为参数被传递(函数套函数)

函数作为返回值被传递(函数套函数)

闭包的作用:

闭包引用的变量不会被销毁,也就是可以访问

闭包可以实现局部变量,避免全局变量污染

总结:

闭包也是变量作用域的特殊情况:

在变量定义的地方就开始了查找赋值,而不是在函数执行的地方开始查找赋值

函数作为返回值被传递


总结:

被闭包引用的局部变量,不会被销毁

闭包可以实现局部变量,避免全局变量污染

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

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

651 篇文章

作家榜 »

  1. admin 651 文章
  2. 粪斗 185 文章
  3. 王凯 92 文章
  4. 廖雪 78 文章
  5. 牟雪峰 12 文章
  6. 李沁雪 9 文章
  7. 全易 2 文章
  8. Stevengring 0 文章