-1

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

有什么改变吗?

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

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


    

ReferenceError: bar 未定义

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

谢谢。

4

1 回答 1

3

有什么改变吗?

不是松散模式,不会,也不会。JavaScript 的指导委员会 TC39 非常正确地意识到向后兼容性。

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

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

在此处输入图像描述

在此处输入图像描述

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

于 2019-07-22T09:17:53.433 回答