为啥全局变量不添加到浏览器的窗口对象? [复制]
Posted
技术标签:
【中文标题】为啥全局变量不添加到浏览器的窗口对象? [复制]【英文标题】:Why global let variables not added to window object of browser? [duplicate]为什么全局变量不添加到浏览器的窗口对象? [复制] 【发布时间】:2020-06-06 08:41:39 【问题描述】:考虑下面我在我的 chrome 浏览器控制台中运行的代码:
var x = "hello";
let foo = function()
console.log("hi");
;
console.log(x); // hello
console.log(foo()); //hi
console.log(window.x); // hello
console.log(window.foo()); // Error
如果我使用var foo =...
而不是let foo = ..
,那么这将有效。为什么 ?
【问题讨论】:
因为let
是这样定义的。
***.com/questions/55030498/…
【参考方案1】:
这是design:
let 允许您声明限制在块语句或使用它的表达式的范围内的变量,这与 var 关键字不同,它在全局范围内定义变量,或者在本地定义整个函数,而不考虑块范围。 var 和 let 之间的另一个区别是后者仅在解析器评估它时才被初始化为一个值(见下文)。
就像 const 一样,let 不会创建窗口的属性 全局声明时的对象(在最顶层范围内)。
【讨论】:
来自 MDN:developer.mozilla.org/en-US/docs/Web/javascript/Reference/…以上是关于为啥全局变量不添加到浏览器的窗口对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章