ES6常考知识点
let、var、const区别
**1. 变量声明提升?let与var的区别?**
(1)var 和 function 的提升,let 和 const不提升;let有块级作用域。
<一>
let a = 'the window';
let obj = {
a: 'the obj',
getObjName: function() {
return function() {
return this.a;
};
}
};
alert(obj.getObjName()());
如果实用的是var声明的变量a的话,输出结果是预期的’the window’,
但是现在使用let声明,输出的时候却是undefined.
let a = 'the window';
alert(window.a); // undefined
var a = 'the window';
alert(window.a); // the window
var声明的全局变量,默认会添加到window下,作为window的一个属性值存在.
使用let在声明变量的时候明显不同, 不会作为window的属性, 单纯的就是声明了一个块级变量
上面的函数中,实际调用是 alert(this.a) , 此时this指向window,而window下没有对应属性a , 所以输出结果undefined.
<二>
var a = 10;
(function(){
console.log(a);
var a = 100;
})();
//结果:输出undefined
function中有var a = 100;
声明会提升到function最开头,但赋值发生在最后。
上面的代码等价于:
var a = 10;
(function(){
var a;
console.log(a);
a = 100;
})();
打印a的时候,a并没有在function内赋值,所以是undefined
(2) 暂时性死区。创建、初始化、赋值,var是创建后立即初始化未undefined,let是创建后等赋值时初始化。未初始化就使用就会报错。(参考方方的这篇文章 https://zhuanlan.zhihu.com/p/28140450)