var
声明会在全局对象上创建属性:var x = 15;
console.log(window.x); // logs 15 in browser
console.log(global.x); // logs 15 in Node.js
ES6 引入了具有块级作用域的 let
声明,引入了词法作用域。
let x = 15;
{
let x = 14;
}
console.log(x); // logs 15;
然而,这些声明是否会在全局对象上创建属性呢?
let x = 15;
// what is this supposed to log in the browser according to ES6?
console.log(window.x); // 15 in Firefox
console.log(global.x); // undefined in Node.js with flag
var x = 15
,它将作用于全局范围,你可以在下一行输入global.x
轻松验证。 - Benjamin Gruenbaum