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

问题描述 投票:0回答:1

考虑我在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 = ..,那么这会起作用。为什么呢

javascript dom
1个回答
1
投票

这是design

let允许您声明限制在块语句或使用它的表达式范围内的变量,这与var关键字不同,var关键字全局定义变量,或在整个函数局部定义变量,而不管块范围如何。 var和let之间的另一个区别是,只有当解析器对其求值时,后者才会初始化为一个值(请参见下文)。

就像const一样让不创建窗口的属性全局声明时(在最顶层的作用域中)对象。

© www.soinside.com 2019 - 2024. All rights reserved.