ES6中var、let、const的区别

ES6新特性 - let 、const

var声明变量是最常用的声明方式,由于var的一些缺陷(比如变量提升效果),ES6加入let和const。
这里先说变量提升是个什么东西

变量提升

我们有两个区域,在区域1,我们声明,区域2使用,这是很正常的写法,先声明再使用

function mFun() {
    var key = 1;// Area 1

    console.log('key: ', key);// Area 2
}

运行结果
Chrome的DevTool运行结果
如果我们这样写

function mFun() {
    key = 1;
    console.log('key: ', key);// Area 1

    var key;// Area 2

    console.log('key in window :', key in window);
}

运行结果
Chrome的DevTool运行结果

可以看到,key = 1; 这个语句并没有将key赋给全局变量window,
key的作用域还是mFun里面,但是key还没声明,我们就给他赋值为1,
说明在mFun里面key已经被定义了。

这里要说的变量提升效果就是如此,你在mFun的任何地方用var定义变量,都和在首行定义的效果是一样的。
下面两段代码是等价的。
看了之后是不是觉得有点熟悉啊,当我们用function定义方法的时候,function可以写在后面,然后在前面的代码调用
这个function也是有提升效果的,相当于在代码第一行做function的定义。

function mFun() {
    key = 'name';
    value = 'Mike';

    console.log('key:',key);
    console.log('value:',value);


    var key;
    var value;
}
function mFun() {
    var key;
    var value;

    key = 'name';
    value = 'Mike';

    console.log('key:',key);
    console.log('value:',value);
}
 注意,如果是var声明变量保存function的方式这样是不行的(看下图)。

这里写图片描述


let

let定义变量,const定义常量,变量可以重新赋值,常量不可以
let 和 var 的使用方式差不多,但是let 必须先声明再使用,否则报错
这里写图片描述
其次,let有块级作用域,var 只有方法作用域,就是如果在if块或者for、while等块中用var定义的变量,
在方法区域内,依旧存在此变量。(代码运行看到if中定义的key,在if外还能用,因为var定义了key,
在mFun内都可以使用)
这里写图片描述
let的块级作用域演示,相同的代码,将var改为let,在if的块外访问key说key还没被定义,

这里写图片描述

let的块级作用也不是非要if,而是let出来的第一层花括号{},就是他的作用域。
下面运行的代码,看到中间的块中再次用let定义了key,对外面的key没有影响
这里写图片描述

const

说完了let,简单子再说一下const,和java的final类似,定义是不可再修改,并且
在不像Java那样可以先定义,再构造函数进行初始化
js中,const定义的常量必须直接赋值(这点很重要),const和let同样支持块级作用域
这里写图片描述

这里写图片描述

这里写图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值