【发布时间】:2019-07-22 09:09:38
【问题描述】:
我在 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 未定义
另一个问题是关于未定义被附加到输出日志,我在这个问题中没有提到它。不知道为什么这被标记为重复。这个问题是关于全局执行上下文/范围
谢谢。
【问题讨论】:
-
我无法重现该问题 — i.imgur.com/HkiUumO.png — 但不要这样做。隐式全局变量很糟糕(在严格模式下被禁止,始终使用严格模式)。
-
该问题在 Chrome 开发工具中重现。但不是真的在sn-p中。无论如何,您根本不应该这样做
-
它应该同时在客户端和服务器中进行控制台,但无论如何这都是不好的做法
-
“有什么变化吗?” 不是松散模式,不会,也不会。 JavaScript 的指导委员会 TC39 非常正确地非常意识到向后兼容性。在严格模式下,该代码会失败,因为
bar在您分配给它的位置未声明。 -
我明白这不是一个好习惯,我们应该有严格模式。但只是想验证凯尔在会议上所说的话。我正在使用 node 命令和 chrome 控制台在终端中运行它
标签: javascript google-chrome google-chrome-devtools strict-mode