我试图理解JavaScript中的变量作用域。以下是我的做法:
<script>
for (var i = 0; i < 3; i++) {
document.getElementById(i).onclick = function() {
console.log(i);
}
}
</script>
输出结果始终为3,我理解这是因为i已经被引用保留了。如何将i本地化,以便可以记录递增的值?
谢谢!
更新
感谢大家的快速和不错的回应。这些解决方案确实很有帮助!
最初,我尝试了与@GrailsGuy类似的方法,在此提供代码:
<script>
for (var i = 1; i <= 3; i++) {
document.getElementById(i).onclick = function() {
console.log(logCall(i));
}
}
function logCall(i) {
return i;
}
</script>
但是看起来
i
没有被本地化。无法确定原因!
console.log(i)
还是superlongandconfusingfunctionname(i)
,都没有任何区别。您正在尝试在循环终止后访问i
。 - Felix Kling