为啥全局变量不添加到浏览器的窗口对象? [复制]

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/…

以上是关于为啥全局变量不添加到浏览器的窗口对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 全局对象

低代码平台-宜搭的核心概念

为啥多处理工作者不能更改全局变量? [复制]

为啥我的函数使用局部变量而不是全局变量? [复制]

Node. js 有哪些全局对象?

为啥使用全局变量类(单例)是不好的做法? [复制]