前言
? 本文以表格的形式进行呈现,做了较为清晰的对比。
ECMAscript6 以前有一些不合理的地方比如? 变量提升 无区域块的概念 很容易造成变量名冲突 ES6提供了 let 和const 声明变量和常量的解决方法
let const var 对比表格?
? ?关于const 值不能更改需要强调对于基本数据类型:Number? String Boolean null undefined symbol bigint? ?是不能修改值的 对于引用数据类型 : Object 下面的 Object Array Date Function RegExp(正则表达式) 是可以改堆里面对象的值的但是不可以更改栈里面的地址
?对于暂时性死区的注意点
let a = 100;
function fn() {
consol.log(a);
let a = 10;
}
fn();
? 此时就存在暂时性死区的问题? 这么写程序会报错? ?当在区域块内用 let or const 声明变量时这个变量名就和这个区域块绑定了 里面的相同变量名的a是不会按照作用域链往外查询的? 而又声明在了定义之前所有就会报错?
一个经典的let 有关的面试题
?
let arr = [];
for (let i = 0; i < 2; i++) { //每循环一次产生一个作业域
arr[i] = function() {
console.log(i);
}
}
arr[0](); // 0 要从自己块级作用域中查找自己对应的i
arr[1](); // 1
?pl 每循环一次就会产生一次区域块
|