且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

javascript - js 作用域问题

更新时间:2023-02-26 07:42:41

经典问题啊,js高程里好像也用的这个例子。

你只要这么想,一个方法定义了,你只要不执行,方法里的代码永远不会运行。所以说,定义方法时,根本没人关心

return i

这个i是啥,只有执行的时候才会去找i,这时候i已经是10喽。

为什么立即执行函数可以解决这个问题呢,原因并不是你理解的那样。因为立即执行的并不是a[0]函数本身,而是它的外层函数

(function(i){
    a[i]=function(){
        return i;
    }
})(i)

你说的立即执行应该是这种情况吧。可以看到a[i]并没有执行,立即执行函数在这起的作用是划出一块作用域。这是一个典型的闭包,因为闭包的原因,i在立即执行函数执行完后不会被销毁,当a[i]执行时,会先找到闭包中的i,而不是全局的i。所以才会出现正确的结果。