考虑我在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 = ..
,那么这会起作用。为什么呢
这是design:
let允许您声明限制在块语句或使用它的表达式范围内的变量,这与var关键字不同,var关键字全局定义变量,或在整个函数局部定义变量,而不管块范围如何。 var和let之间的另一个区别是,只有当解析器对其求值时,后者才会初始化为一个值(请参见下文)。
就像const一样让不创建窗口的属性全局声明时(在最顶层的作用域中)对象。