JS 闭包
一开始觉得闭包很难理解,这两天看到了一篇文章后发现其实闭包挺简单的。
什么是闭包
简单点,闭包就是函数+函数内能访问的局部变量
例如:
var local = 123
function fun() {
alert(local)
}
上面的例子算一个闭包,因为 local 是一个全局变量,需要稍微变一下
function fun1() {
var local = 123
function fun2() {
alert(123)
}
return fun2
}
var a = fun1()
a() // 调用
这样 local 就变成一个局部变量。return fun2
是为了外部能够访问 fun1 和 fun2 内部的内容。也可以用window.fun2=fun2
全局属性赋值代替。
闭包的作用
- 间接调用函数内部的局部变量;
- 让这些变量的值始终保持在内存中;
- 暂存数据,避免外部污染。
一些看法
“闭包” 英文是 Closure,closure 的直译为停业,关闭,倒闭等等,我不知道为什么会把 closure 翻译为闭包?如果是在其他有包概念的语言中这样会好一些,但是在 js 中我觉得叫做“闭域”可能会更好理解一点,因为闭包的本质就是作用域的问题。很多时候用了到闭包或者其他一些东西而不知道,要不是需要面试确实很少有人会关注这些问题。
以上内容摘自知乎: JS 中的闭包是什么?