考虑这段代码:
for( var i = 1; i <= 2; ++i )
{
$( '#id' + i ).click(
function()
{
alert( 'ID = ' + i );
}
)
}
问题是,当单击 id1 或 id2 时,警报总是显示 ID = 3。现在我知道为什么会发生这种情况(它在调用时进行评估),我只是好奇是否有任何方法可以防止这种情况发生?(1)
这里的许多问题和文章一般都很好地解释了闭包的概念,但是我一直无法找到任何技术来避免它。
在旁注中,我尝试使用(注意额外的关键字“new”):
new function() { alert( 'ID = ' + i ) }
但是,它在定义时直接调用警报,并且对单击事件不执行任何操作。对此有任何想法吗?(2)