ES6常考知识点

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值