二.es6
1.let与get用法
let是es6新增的变量,let与var俩者之间的差别在于如下
(1)let声明的变量只在let命令块中有效。而var声明的变量在全局有效
(2)下图的例子:结合for循环使用的话 由于var声明全局变量,也只有一个变量,所以每次循环 i的值都会改变。let声明的变量只在本轮循环有效,每次循环都是一个新的变量,所以最后的结果是6。另外也要讲下for循环的特别之处,设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。
(3) let不存在变量提升,var有变量提升 实例如下:
(4)暂时性死区
let暂时性死区的意思是 如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。实例如下:
暂时性死区意味着typeof不再是一个百分之百安全的操作
死区的经典案例
function bar(x=y,y=2){
return[x,y] //会报错,原因就是x=y的时候 y还没有定义
}
bar();
function bar1(y=2,x=y){
return[x,y] //不会报错,原因就是x=y的时候 y以及定义为2了
}
bar1();
let x=x //会报错
var x=x //不会报错
(5)let不可以重复声明变量,var可以重复声明
思考案例
(6)let的块级作用域
在es6还没有出来之前 作用域包括了全局作用域和函数作用域,没有块级作用域,也带来了很多不合理的场景。
第一.内层变量可能会覆盖外层变量。如下案例
第二.用来计数的循环变量泄漏为全局变量
(7)es6块状作用域的特点
如下图,函数有俩个代码块,外层代码不受内存代码块的影响,所以输出5,如果俩个变量都用var定义,输出为10。
后面意识到正值春招之时,所以晚点也会带来前端笔试题和面试题的分享。也是对于我自我的一种提升。有兴趣可以关注我的博客