javascript控制台记录的循环值不正确
javascript console not logging correct for loop values
i在Chrome的javascript控制台中输入了以下代码:
function test() {
var a = [1, 2, 3, 4];
for (var i = 0; i < a.length; i++) {
var a = i;
console.log(a);
}
console.log(a);
}
test();
当我调用test()时,我没有得到值0,1,2,3
,而是得到了两次0
。循环似乎只运行过一次,有人知道为什么吗?
这是因为在循环内外都使用了相同的变量a
function test() {
var a = [1, 2, 3, 4];
for (var i = 0; i < a.length; i++) {
var b = i;
console.log(b);
}
console.log(a);
}
test();
变量声明(var a
等)在函数内部被"提升"。for
循环没有单独的作用域。var
的第二次使用被忽略,并且相同的a
在循环的第一次迭代内被重写。由于a
现在等于0
,因此循环结束。
您可以在这里阅读更多关于吊装的信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var
因为变量声明(以及一般的声明)是在执行任何代码之前处理的,所以在代码中的任何位置声明变量都相当于在顶部声明变量。这也意味着一个变量在声明之前就可以被使用。这种行为被称为"提升",因为变量声明似乎被移动到了函数或全局代码的顶部。
因此,建议始终在其作用域的顶部(全局代码的顶部和函数代码的顶部)声明变量,以便清楚哪些变量是函数作用域(本地)的,哪些变量在作用域链上解析。
这是因为您正在覆盖变量a
。所以在第一次迭代中,将a
从array
更改为0
。在下一次迭代中,a
不具有属性length
和循环中断。所以你得到了两次0
。
function test() {
var a = [1, 2, 3, 4];
var len = a.length;
for (var i = 0; i < len; i++) {
var a = i;
console.log(a);
}
console.log(a);
}
test();
更好的方法:
function test() {
var a = [1, 2, 3, 4];
for (var i = 0; i < a.length; i++) {
console.log(i);
}
console.log(a);
}
test();
相关文章:
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- Amazon S3 REST API大小不正确
- Javascript Reg Exp不正确匹配
- javascript控制台记录的循环值不正确
- JavaScript 循环输出顺序不正确 - 如何解决这个问题
- for 循环无法打印不正确的值.需要索引
- 使用AngularJS循环访问JSON文件时出现“格式不正确”的Firefox错误
- 循环中的变量不正确
- 循环内部的jQuery mouseover()函数赋值不正确
- 变量在循环中更新不正确
- JavaScript循环表放置不正确
- parseInt循环不正确
- 我的For循环计时不正确,是什么'It’他错了
- 当验证不正确时,输入表单中的Javascript检查电子邮件地址只会在Safari中循环
- 如何通过jQuery获取同一类的所有值,并插入数组和循环计数在jQuery中是不正确的
- 如果答案不正确,我如何循环回提示
- 简单的Javascript图像旋转不正确循环
- ajax中的循环和条件不正确
- 脚本中的循环迭代不正确
- JS:循环函数通过复选框数组计数不正确