实质问题, 闭包的定义

当函数访问并记住所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。

(个人理解)闭包并没有什么神奇的,闭包是词法作用域的特性,函数能够保存它本身的词法作用域的变量是肯定的, 即使这个函数嵌套在另一个函数里面也不例外。

循环和闭包

闭包用来保存循环变量的值,每一次循环都创建一个副本。 如下代码:

1
2
3
4
5
6
7
    for(var i=1; i<=5; i++) {
        (function(j)
            setTimeout(function timer(){
                console.log(j)
            })
        {})(i)
    }

模块

可以利用闭包去构建模块,封装私有属性和方法,然后暴露给外部方案修改内部的属性。