ECMAScript 6介绍了该let声明.我听说它被描述为"本地"变量,但我仍然不太确定它与var关键字的行为有何不同.
有什么区别?何时应该let使用var?
在JavaScript中,var声明在全局对象上创建属性:
var x = 15;
console.log(window.x); // logs 15 in browser
console.log(global.x); // logs 15 in Node.js
Run Code Online (Sandbox Code Playgroud)
ES6引入let了具有块范围的声明的词法作用域.
let x = 15;
{
let x = 14;
}
console.log(x); // logs 15;
Run Code Online (Sandbox Code Playgroud)
但是,这些声明是否在全局对象上创建属性?
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
Run Code Online (Sandbox Code Playgroud) 我过去常常检查是否var定义了全局:
if (window['myvar']==null) ...
Run Code Online (Sandbox Code Playgroud)
要么
if (window.myvar==null) ...
Run Code Online (Sandbox Code Playgroud)
它适用于 var myvar
现在我正在尝试切换到let,这不再起作用了.
var myvar='a';
console.log(window.myvar); // gives me a
let mylet='b';
console.log(window.mylet); // gives me undefined
Run Code Online (Sandbox Code Playgroud)
问题:一个全球性的let,没有任何的地方,如果有什么东西被像我可以定义我可以看看var从window对象?
更普遍的:
是var myvar='a'相当于window.myvar='a'?
我听到人们说在全球范围内,let并且var/表现相同,但这不是我所看到的.
特定
const localName = "local_name";
delete localName; // true
console.log(localName); // "local_name"
Run Code Online (Sandbox Code Playgroud)
是否可以删除使用声明的变量const?