我在 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 未定义
另一个问题是关于 undefined 被附加到输出日志,我在这个问题中没有提到它。不知道为什么这被标记为重复。这个问题是关于全局执行上下文/范围
谢谢。
有什么改变吗?
不是宽松模式,不,也不会。JavaScript的指导委员会,TC39,是非常正确非常自觉的向后兼容性。
在严格模式下,该代码失败,因为bar
在您分配给它的位置时未声明。
你已经说过你在 Chrome 的控制台和 Node.js 的 REPL 中看到了这一点。我看到undefined
在这两种情况下,但它是因为这些环境都出现了呼吁的结果console.log
(这是undefined
)后显示bar
。我"I am in global scope"
先看到,然后undefined
(调用的结果console.log
):
也就是说,不要将控制台用于此类事情。:-) 控制台是一个非常特殊的环境,尤其是在作用域周围,因为它们具有交互性。如果您想知道某些东西的真正工作原理,并且它甚至与范围相关,最好将其复制到实际文件或脚本中,而不是在控制台中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句