JavaScript 函数内部没有 var 的变量在全局执行上下文中不可用

JavaScript variable without var inside function not available in Global Execution Context

我在 kyle simpson 的一门 javascript 课程中了解到,如果我们在 Javascript 函数中声明一个变量而没有任何前缀 var 关键字,那么该变量将在全局执行上下文中可用,但是当我在 chrome 开发人员工具或 nodejs 中尝试它时,它会抛出 ReferenceError:....

有什么变化吗?

在 Windows 和 Linux 上的 Firefox 和 Chrome 中都会发生。

function foo() {
  bar = "I am in global scope";
}
foo();
console.log(bar);


    

ReferenceError: bar is not defined

另一个问题是关于未定义被附加到输出日志,我在这个问题中没有提到它。不知道为什么这被标记为重复。这个问题是关于全局执行上下文/范围

谢谢。

Has anything changed ?

不是宽松模式,不会,也不会。 JavaScript 的指导委员会 TC39 非常正确地 非常 意识到 backward-compatibility。

在严格模式下,该代码失败,因为 bar 在您分配给它的位置未声明。

你说过你在 Chrome 的控制台和 Node.js 的 REPL 中看到了这个。我在这两种情况下都看到了 undefined,但这是因为这些环境正在显示调用 console.log(即 undefined)的结果 after 显示bar。我先看到"I am in global scope",然后是undefined(调用console.log的结果):

也就是说,不要将控制台用于此类事情。 :-) 控制台是一个非常特殊的环境,尤其是在范围内,因为它们具有交互性。如果你想知道某些东西是如何工作的,即使它是切线的scope-related,最好在实际文件或脚本中复制它,而不是控制台。