一、闭包是什么东东
(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值
第一次写文章有些不足 多多指教
闭包一定要结合作用域链来进行分析