JavaScript,对于函数,var的行为似乎很奇怪

时间:2018-08-23 12:20:48

标签: javascript

对于以下代码,我得到了UNDEFINED,Entering Loop,UNDEFINED,0、0、1、1、2的信息。我理解为什么我只有一个2(我认为),但是我很难理解为什么两个0?

'use strict';
console.log(message);

console.log('Entering Loop');
for (var i = 0; i < 3; i++) {
  console.log(message);
  var message = 'number: ' + i;
  console.log(message);
}

2 个答案:

答案 0 :(得分:2)

您正在设置变量前后进行记录。 var不会将变量限制为块,因此旧值仍然存在。在您的第一个循环迭代中,您将获得

undefined
number: 0

第二秒钟,您将获得

number: 0
number: 1

在最后一次迭代中,您会得到

number: 1
number: 2

执行循环时:在循环开始之前运行了第一部分(var i = 0;)。第二部分(i < 3)在每次迭代之前运行以确定是否继续,第三部分(i++)在每次迭代之后运行。如果第二部分是正确的,则循环不会重新开始。这是展开的循环。

'use strict';
var message;
console.log(message); // "undefined"

console.log('Entering Loop');
var i = 0;

// loop if i < 3, i === 0
console.log(message); // "undefined"
message = 'number: ' + i;
console.log(message); // "number: 0"
i++; // i === 1

// loop if i < 3, i === 1
console.log(message); // "number: 0"
message = 'number: ' + i;
console.log(message); // "number: 1"
i++; // i === 2

// loop if i < 3, i === 2
console.log(message); // "number: 1"
message = 'number: ' + i;
console.log(message); // "number: 2"
i++; // i === 3

// loop if i < 3, i === 3

答案 1 :(得分:0)

进入循环,您的number未定义。

在循环中将其设置为“数字= 0”。

再次进入循环number仍设置为“数字= 0”,并被“数字= 1”覆盖。

再次进入循环number仍设置为“ Number = 1”,并被“ Number = 2”覆盖。

i == 3再次进入循环,因此结束。

您可以轻松地用笔和一些纸来完成此操作。