js闭包浅记

本文通过两个具体例子详细解析了JavaScript中闭包的概念。闭包允许一个函数记住并访问在其定义环境中声明的变量,即使该函数在定义它的作用域之外被调用。
以下解释均为个人理解,有错误之处的话欢迎提出,能给出建议的话万分感激!


定义:
当函数可以记住并访问所在的词法作用域时,就产生了闭包。即使函数是在当前词法作用域之外执行。


例1:
function foo(){
var a=2;
function bar(){
console.log(a);//2
}
bar();
}
foo();


解释:例1产生了闭包吗?发生了,因为bar()的执行访问了在bar函数作用域外的foo作用域的a。虽然这只是基于词法作用域的查找规则,但这些规则是闭包的一部分。


例2:
function foo(){
  var a = 2;
  function bar(){
    console.log(a);//2
  }
  return bar;
}
var baz = foo();
baz();


解释:例2产生了另一种闭包,即baz()在foo()外部使用了a;因为foo返回bar,故baz相当于bar,即bar在它自己定义的词法作用域(foo作用域)以外的地方执行。一般情况下,函数执行后其作用域会被自动销毁,但是闭包阻止了它,即在foo()执行后baz()仍然可以引用foo()里的a。这种闭包即开头定义的'函数记住并访问所在的词法作用域'。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值