1
Septembers 2015-08-01 20:16:22 +08:00 via Android
作用域
|
2
an168bang521 2015-08-01 20:23:34 +08:00 2
一句话:闭包可以避免全局变量的污染;有利于对变量的控制;
其实闭包原理很简单的,就是开辟一个小的栈内存;也可以理解为,函数执行就是生成一个闭包(作用域); 但是闭包也有缺点:如果闭包外面有变量接收闭包内的引用类型返回值;那么这个作用域不销毁,浪费浏览器性能;(正常的闭包应该是运行过后,浏览器在空闲的时候销毁) |
3
Mark24 OP @an168bang521 感谢
|
4
w88975 2015-08-01 20:59:59 +08:00 1
JS没有class的概念,所以变量是全局的,很容易造成变量的污染,闭包的作用在于,闭包环境内,可以访问全局变量,在闭包环境里定义的变量,类似于class内定义的 private 变量,外部无法访问.
|
5
plqws 2015-08-01 22:40:08 +08:00
我想请教个问题: es6 加入了 let 以后是不是就可以抛弃闭包了?
|
6
yanguango 2015-08-01 23:14:57 +08:00
wiki 的第一句话就解释的很清楚了
In programming languages, closures (also lexical closures or function closures) are a technique for implementing lexically scoped name binding in languages with first-class functions. |
7
FrankFang128 2015-08-01 23:15:37 +08:00
闭包是一个自然而然的事情,并不需要刻意学习。
|
8
Mark24 OP 加一条自己的理解:
闭包,数学上解释,应该就是 “偏函数”,懂数学的人,到这里,用这个概念对照一下,应该秒懂。 类似 z=f(x,y),z=f(x=6,y),可以传入一个x,等到返回的是一个关于x定值,一个关于y的函数,合适的时候,传入y,就可以求值了 用途,就是延时计算,根据环境计算,有种动态的意味在里面 |
9
pysama 2015-08-03 10:37:31 +08:00
如果没有闭包,在函数外部就无法访问函数里面的局部变量
所以,闭包的两个作用就是: 1. 实现访问控制 (读取函数内部变量); 2. 让一些变量始终保存在内存(利用这个特性时要记得手动释放)。 |
11
an168bang521 2015-08-07 23:04:12 +08:00 1
|
12
Mark24 OP @an168bang521 THX~
|