理解Javascript闭包

看如下代码:

1 function foo() {
2       var a = 1;
3       function bar() {
4         console.log(a)
5       }
6       return bar
7 }
8 var baz = foo()
9 baz()

打印结果显示为1,

foo() 执行后, 其返回值(也就是内部的 bar() 函数) 赋值给变量 baz 并调用 baz(), 实际上只是通过不同的标识符引用调用了内部的函数 bar()。 
此时,foo()执行后通常以为引擎的垃圾回收机制销毁foo的内部作用域,实际上受bar所声明位置的影响,使得此作用域一直存在,bar对此作用域的

引用就叫作闭包。

 1     var fn;
 2     function foo() {
 3       var a = 2;
 4       function bar() {
 5         console.log(a)
 6       }
 7       fn = bar
 8     }
 9     function baz() {
10       fn()
11     }
12     foo()
13     baz()

将内部函数传递到所在词法作用域以外,它都会持有对原始定义作用域的引用,无论在何处使用这个函数,都会使用闭包。

posted on 2019-02-18 11:30  时光游弋  阅读(96)  评论(0编辑  收藏  举报