理解JavaScript中的闭包

172 阅读1分钟
一、闭包是什么东东

(1) 什么叫闭包:JavaScript权威指南给的解释是:

函数对象可以根据作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域当中.这个特性在计算机科学文献中叫做闭包

 (2) 闭包是如何产生的:

当一个函数嵌套了另一个函数,外部函数将嵌套的函数作为返回值就会产生闭包 也就说 "函数嵌套函数"

function foo () {   var name = "闭包"function bar () {   console.log(name) }    return bar  }let Foo  = foo()  // let Foo = function bar () {console.log (name)}Foo(); // bar 

让我们来分析一下这段代码

1.函数foo被定义 此时函数foo进行预编译 

2.执行foo 创建执行期上下文 产生foo的全局对象 还有局部对象  此时的AO当中就有{name :包}  此时的foo的上下文应该被销毁.

3.返回函数bar,bar执行 bar 也会产生一个执行期上下文 执行console.log(name) 但是bar的AO对象没有name这个值,他会根据作用域链去找到上一层函数留下的name值 

第一次写文章有些不足 多多指教

闭包一定要结合作用域链来进行分析