javascript,对于函数来说,var的行为似乎很奇怪
对于下面的代码,我得到未定义,进入循环,未定义,0,0,1,1,2。我明白为什么我只得到一个2(我想),但我很难理解为什么我得到两个0javascript,对于函数来说,var的行为似乎很奇怪,javascript,Javascript,对于下面的代码,我得到未定义,进入循环,未定义,0,0,1,1,2。我明白为什么我只得到一个2(我想),但我很难理解为什么我得到两个0 “严格使用”; 控制台日志(消息); console.log(“进入循环”); 对于(变量i=0;i
“严格使用”;
控制台日志(消息);
console.log(“进入循环”);
对于(变量i=0;i<3;i++){
控制台日志(消息);
var消息='编号:'+i;
控制台日志(消息);
}
在设置变量之前和之后都要进行日志记录var
不会将变量限制在块中,因此旧值会保留。在第一次循环迭代中,您将获得
undefined
number: 0
number: 0
number: 1
number: 1
number: 2
在你得到的那一秒
undefined
number: 0
number: 0
number: 1
number: 1
number: 2
在最后一次迭代中,您将得到
undefined
number: 0
number: 0
number: 1
number: 1
number: 2
执行循环时:第一部分(var i=0;
)在循环开始之前运行。第二部分(i<3
)在每次迭代之前运行,以确定是否继续,第三部分(i++
)在每次迭代之后运行。如果第二部分为truthy,则循环不会重新启动。这是你的循环展开
“严格使用”;
var消息;
console.log(消息);//“未定义”
console.log(“进入循环”);
var i=0;
//如果i<3,则循环i==0
console.log(消息);//“未定义”
消息='编号:'+i;
console.log(消息);//“编号:0”
i++;//i==1
//如果i<3,则循环i==1
console.log(消息);//“编号:0”
消息='编号:'+i;
console.log(消息);//“编号:1”
i++;//i==2
//如果i<3,则循环i==2
console.log(消息);//“编号:1”
消息='编号:'+i;
console.log(消息);//“号码:2”
i++;//i==3
//循环如果i<3,i==3
进入循环您的编号
未定义
在循环中,它被设置为“Number=0”
再次进入循环number
仍设置为“number=0”,并被“number=1”覆盖
再次进入循环number
仍设置为“number=1”,并被“number=2”覆盖
再次进入循环i==3,因此循环结束
您可以用一支笔和一些纸轻松地完成此操作。因此,在循环的第一次运行时,第一个console.log将是未定义的,因为消息尚未设置。然后发送消息=“编号:0”。在第二个循环中,消息仍然是“number:0”,因此,如果需要的话,你真的需要用笔和纸一步一步地完成。根据经验法则,使用++i而不是i++,你不会出错。@tinker-tailer这将如何改变这里的任何事情?@tinker-tailer不,这在这种情况下不会改变任何东西。我喜欢这样,但在展开的示例中,使用
console.log(message)上的注释可能值得一提代码>在第一个i++
之后,消息仍然等于'number:0'
,因为它还没有被更新,即使i
现在是1
我对它进行了一些调整,以显示该变量被重用/提升并添加了日志注释。你认为@NickAYep这正是我所想的:)