javascript - 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);
}
解决方案
您在设置变量之前和之后记录。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
推荐阅读
- javascript - 如何在 Typescript 中描述原型继承?
- linux - 是否有适用于 Linux 的 ActiveX 等效项,是否可以在 Linux 上的 Matlab 中完成?
- javascript - 如何使用查询计算多少等于值并在javascript中打印?
- c# - 如何对 WPF 应用程序启用 DPI 感知并根据屏幕分辨率对其进行缩放
- shared-hosting - 共享虚拟主机的内容需要几分钟才能刷新
- c# - 需要c#在代码中填充一个类的多条记录
- javascript - ./ vs 路径和文件链接中的目录名
- javascript - 如何使 vuelidate alpha vuejs3 具有全局 $v 函数而不是在每个 vue 文件中声明?
- ruby-on-rails - 我无法使用普通 Rails + Turbolinks Shopify 应用程序
- list - NoSuchMethodError:null 上的无效成员:'length'