首页 > 解决方案 > javascript,对于函数,var 似乎表现得很奇怪

问题描述

对于以下代码,我得到 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);
}

标签: javascript

解决方案


您在设置变量之前和之后记录。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


推荐阅读