![](/img/trans.png)
[英]Why is this javascript if statement/for-loop syntactically incorrect?
[英]Why JavaScript alerts allways 4 in when for-loop is for 3?
为什么此JavaScript在for循环为3时始终向4发出警报?
// alert
function reOrderLayers(layerToaAlter) {
alert(layerToaAlter);
}
// prepare
var laCount;
for (laCount = 1; laCount <= 3; laCount++) {
var la = document.getElementById("layerChanger"+laCount);
la.addEventListener("click", function () { reOrderLayers(laCount) });
}
当循环结束时,表示i
>3
,要在函数调用中保留特定数字,请使用闭包:
la.addEventListener("click", (function(count) { return function () { reOrderLayers(count) } })(laCount) );
for循环将一直持续到laCount == 4
(最后一次执行循环时,该值为3,然后将其递增为4,以使循环测试失败)。 因此,在for循环之后该值为4。
因为当您单击元素时; for循环已经完成,并且laCount的当前值为4;
您应该创建一个上下文来为每个layerChanger保存laCount:
function reOrderLayers(layerToaAlter) {
alert(layerToaAlter);
}
function context(la, laCount){
la.addEventListener("click", function () { reOrderLayers(laCount) });
}
// prepare
var laCount, la;
for (laCount = 1; laCount <= 3; laCount++) {
la = document.getElementById("layerChanger"+laCount);
context(la, laCount);
}
您没有在循环中立即调用reOrderLayers
,而是构造了一个函数文字。 文字将有一个闭包,它引用环境中的laCount
变量,当最终触发click事件时,该变量将为4。
因为:
var c = 0;
for(c = 1; c <= 3; c++) {};
alert(c); // alerts 4.
在前3次迭代中, for
循环进入主体并执行内部的代码。 一旦您进行了第4次迭代, lacount
就会增加,并且条件失败,因此您不必再次进入循环。
如果出于某种原因需要lacount
为3
,则可以尝试将初始for循环条件设置为i < 3
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.