使用立即调用表达式可以解决闭包中循环里的问题,比如,如果不用立即调用表达式的循环语句执行时,那么i的值始终为img.length,因为i已经执行过了,并在内存中已经保留了。
另外js可以允许()()的格式。用这种方式也可以模拟块级运用域,因为立即执行函数直接就会运行,执行完成之后会自动释放内部变量。
for (var i = 0, len = img.length; i < len; i++) { //使用立即调用的函数表达式,为了获取i的不同值 (function (i) { imgs[i].onmouseover = function () { //执行语句 } })(i); }