前端面试之ES6基础--let和const

ES6是什么?全称ECMAScript6,是新版本JS的语法规范。
ES5定义变量是用到var。ES6新增了两个声明标识的关键字let和const。
let和const的特点:
1.不存在变量提升
2.有严格的作用域–块级作用域
3.同一个作用域下不能重复定义同一个名称
下面我们结合代码来演示这三者的区别

//变量提升
console.log(a) ;
console.log(b) ;
console.log(c) 
var a = 'a';
let b = 'b';
const c = 'c';

输出结果
a:undefined b和c都是报错not defined
出现上面的结果是由于js预解析,var定义的变量会提升到当前作用域的最顶端,而let和const不会。预解析后的代码如下:

var a;
console.log(a) ;
console.log(b) ;
console.log(c) 
a = 'a';
let b = 'b';
const c = 'c';

下面来区别一下三者的作用域。
let和const定义的变量只能在块级作用域里访问,不能跨块访问和跨函数访问;var定义的变量可以跨块访问,不能跨函数访问。块级作用域是ES6新增的,用{}表示块级作用域,所以if和for循环里面的{}就表示一个块级作用域。ES6也包括ES5的全局作用域和函数作用域。演示代码如下

var b = 11;
function fn(){
let a = 10;
var b = 10;
let c =10;
if(true){
let a = 100;
var b =100;
c = 100
}
console.log(a);
console.log(b);
console.log(c)
}
fn()
console.log(b)

输出的结果分别是10,100,100,11。
a先在函数的块级作用域定义了,又在if判断的作用域定义了。这两个a属于不同作用域,彼此互不影响。由于打印是在最外层作用域打印的,所以a是10。
b在全局和函数内部都有定义,由于var无法跨函数访问。所以最外层的全局b是11没有影响。而函数内部的b,由于var可以跨块访问,所以在if块级作用域里面定义的b=100会覆盖掉 b=10。所以输出100。
c是100,由于c只在函数内部定义,并没有在if块级里面重新定义,所以这个c是同一个c,可以被修改。

最后讲一下let和const在同一个作用域下不能定义两次,会报错。

let a =1;
let a =2;
const b =1;
const b =2;

在这里插入图片描述
在这里插入图片描述
补充一点,const是用来定义常量的,而且不能只声明不赋值,会报错,另外定义完后就无法修改。
在这里插入图片描述
但如果const定义的是一个数组或者对象,我们可以修改数组或对象里面key的值,只要对象或者数组的堆地址指向没有改变就不会报错。所以直接赋值改变数组或对象是会报错的。
在这里插入图片描述
对你有帮助的话,可以点个赞吗?

今天又下雨了,已经连续下了快一个月。好想去打球。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值