[转载]学习JavaScript闭包(Closure)

阮一峰的网络日志-学习Javascript闭包(Closure)

David Flanagan-JavaScript权威指南(第6版)

Douglas Crockford-JavaScript语言精粹

说明:文章主要部分转载自阮一峰的博客内容,权威指南和语言精粹,少量为个人理解

一,变量的作用域

1,JS的函数内部可以直接读取全局变量;

2,函数内部声明变量的时候,如果不使用var命令,实际上是声明了一个全局变量;

3,在函数外部无法读取函数内的局部变量

[转载]学习JavaScript闭包(Closure)_第1张图片
测试代码1.png
运行结果.png

二 如何从外部读取局部变量?

有时候,需要得到函数的内部变量,

可以在函数f1的内部,定义一个嵌套函数f2,此时f2中可以访问f1中的变量

(JS语言特有的链式作用域chain scope, 子对象会一级一级向上寻找所有父对象的变量,父对象的所有变量对于子对象都是可见的,反之不成立),

将f2作为返回值,可以在f1外部读取f2的内部变量

[转载]学习JavaScript闭包(Closure)_第2张图片
测试代码2.png
测试结果2.png

三 闭包的概念

第二节中的f2函数,就是闭包

各种专业文献中的closure定义非常抽象,我的理解是(引用一中的作者)-闭包就是能够读取其他函数内部变量的函数

由于在JS中,只有函数内部的子函数可以读取局部变量,可以把闭包简单的理解成--定义在函数内部的函数

本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁

四 闭包的用途

闭包可以用在很多的地方,最大的用处是(1)可以在函数外部读取到函数内部的变量,(2)可以让变量的值始终保持在内存中

下面的代码中,result实际上就是闭包f2函数,一共执行了两次,这

你可能感兴趣的:([转载]学习JavaScript闭包(Closure))