什么's是在JavaScript中的循环中定义的变量的作用域
What's the scope of a variable defined inside a loop in JavaScript?
根据JavaScript文档,在函数中创建的变量是该函数的本地变量。然而,我发现在for循环中声明变量时不使用字面var
会导致意外行为(例如。https://jsfiddle.net/carlesaraguz/ao77ac2L/)
为什么?
function iterate1() {
var array = ["hello", "world"];
var str = "";
for (i = 0; i < array.length; i++) {
str += "iterate0 --- " + i + ": " + array[i] + "<br>";
iterate2(array);
str += "iterate0 --- " + i + ": " + array[i] + "<br>";
}
document.getElementById("output0").innerHTML = str;
}
function iterate2(arr) {
var str = ""
for (i = 0; i < arr.length; i++) {
str += "iterate1 --- " + i + ": " + arr[i] + "<br>";
}
document.getElementById("output1").innerHTML = str;
}
$(function() {
iterate1();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="output0"></p>
<p id="output1"></p>
通过在声明变量之前不使用"var",您正在创建一个全局变量,而不是本地变量。
function f1() {
for (var i = 0; i...) {
// i is local to this function
}
}
function f2() {
for (i = 0; i...) {
// i is a global variable
}
}
请参阅https://stackoverflow.com/a/1470494/5780021有关此的更多信息
这里有一个例子,说明当您忘记放置var时会发生什么。变量的范围变为全局
(function() {
myVar = 1;
console.log("myVar should be 1: " + myVar); // should be 1
setTimeout(function() {
console.log("myVar should be 1, but isn't: " + myVar); // should be 1, but isn't
}, 100);
})();
(function() {
for(myVar = 1; myVar < 10; myVar++) {
// nothing, just increment var
}
})();
您会注意到,有两个功能彼此隔离,但实际上使用的是相同的myVar
此外,var
的作用域是它在声明后所包含的函数,无论它是在for
循环、if
还是任何其他类型的块级语句中声明的。
在你的特殊情况下,以下是发生的事情。
iterate0-0-hello|将i
声明为值为0的global
,打印
iterate1-0-hello|将i
的值更改为0,打印并在
之后递增i
iterate1-1-world|i
是上一次递增的1,打印,循环后再次递增
iterate0-2-未定义|i
是上一次增量的2,打印,再次增量,将其提升到3
结束
相关文章:
- 如何在Javascript函数调用中循环变量
- Jquery将循环变量绑定到getJSON函数
- 如何使用jQuery循环变量名
- FileReader加载端中循环变量的值
- 为什么 CoffeScript 不“重用”循环变量
- 循环变量的Javascript不起作用
- 循环变量作为异步函数调用中的参数
- 将循环变量调用到自动压缩选择中
- Javascript 循环变量
- 如何使用以 js 为单位递增的字符串创建 for 循环变量
- JQuery:如何在 jquery 选择器中使用 for 循环变量
- 余烬每循环加倍.使用内部每个循环变量的值绑定到外部每个循环的变量中命名相同的属性
- 处理循环变量的重复声明警告
- 如何将递增的 for 循环变量传递给 node.js 中的函数
- 如何处理来自函数和与垃圾回收器有关的函数的循环变量
- 如何将循环变量传递给元素
- js canvas drawImage 不适用于循环变量
- 在 Jquery 中添加循环变量并存储在输入字段中
- 使用 for 循环变量更改 html 类的名称
- 通过循环变量引用Javascript数组元素