javascript - 在循环中重新定义变量不会使其变得未定义

标签 javascript loops for-loop redeclaration

具有以下 for 循环:

for (var i = 0; i < 3; ++i) {
    console.log(i, p);
    var p;
    p = 42;
}

我期望的输出是:

0 undefined
0 undefined
0 undefined

但实际上,输出是:

0 undefined
0 42
0 42

由于我们在下一行使用 var p (重新声明 p),为什么 p 在下一行中不(始终)未定义console.log 行?

最佳答案

由于 variable hoisting并且您的变量是函数作用域而不是 block 作用域。

你的for循环被翻译成

var p;
for (var i = 0; i < 3; ++i) {
    console.log(i, p);
    p = 42;
}

这意味着第一次访问 p 时它是未定义

下次它已经在当前函数作用域中初始化,因此它将保留初始化值。

关于javascript - 在循环中重新定义变量不会使其变得未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782510/

相关文章:

javascript - 第一次播放后,循环中的howler js音量 slider 不起作用

r - 使用for回路和georoute计算行驶距离时跳过错误

javascript - 试图让函数与 window.onload 循环但不起作用

javascript - JavaScript for 循环初学者

objective-c - 使用 Objective-C 的 for 循环在屏幕上显示按钮

javascript - 长度使我的页面进入无限循环

javascript - 如何使用 nodeJs 创建 Web 服务器

javascript - 如果验证函数返回 true,则聚焦下一个元素

javascript - JavaScript 原型(prototype)上的 Object.freeze() 有什么问题吗?

javascript - Date.getDay 函数返回错误值