我们将得到两次 "2" ,而不是预期的 "1" 和 "2" ,这是因为在 list
中的两个函数访问的变量
i
都是其上一层作用域的同一个变量。
我们改动下代码,以利用闭包来解决这个问题:
外层的“立即执行函数”接收了一个参数变量 i
,在其函数内以参数
j
的形式存在,它与被返回的内层函数中的名称 j
指向同一个引用。外层函数执行并退出后,参数
j
(此时它的值为 i
的当前值)成为了其内层函数的状态的一部分被保存了下来
JavaScript 作用域和闭包,布布扣,bubuko.com
原文:http://www.cnblogs.com/glenblogs/p/3629841.html