跳到主要内容

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全局属性赋值代替。

闭包的作用

  1. 间接调用函数内部的局部变量;
  2. 让这些变量的值始终保持在内存中;
  3. 暂存数据,避免外部污染。

一些看法

“闭包” 英文是 Closure,closure 的直译为停业,关闭,倒闭等等,我不知道为什么会把 closure 翻译为闭包?如果是在其他有包概念的语言中这样会好一些,但是在 js 中我觉得叫做“闭域”可能会更好理解一点,因为闭包的本质就是作用域的问题。很多时候用了到闭包或者其他一些东西而不知道,要不是需要面试确实很少有人会关注这些问题。

以上内容摘自知乎: JS 中的闭包是什么?