js下ES6的let和var介绍
程序员文章站
2022-03-16 17:32:15
1.let和var
let:有块级作用域,必须先声明再使用变量(不存在声明提前),不允许重复声明。
let arr=[];
for (va...
1.let和var
let:有块级作用域,必须先声明再使用变量(不存在声明提前),不允许重复声明。
let arr=[]; for (var a = 0; a < 10; a++) { arr[a]=function(){ console.log(a); }; } for (let a = 10; a < 20; a++) { arr[a]=function(){ console.log(a); }; } console.log(arr); //可以看到有20个函数的数组 //arr[3]; 查看控制台可以看出,作用域链上只有两个,一个是script作用域,往下是window(let出现的是arr在script中,window中是a=10) //arr[13]; 作用域链上有三个,一个block里有a=13(证明每次循环的a都被留给函数作为作用域顶端等待函数执行产生),一个script,一个window里有a=10(证明let只在for中起作用,没污染全局)
var arr = []; let b = 33; function a() { if (true) { var b = 22; let c = 11; function d() { console.log(b, c); } return d; } } console.dir(a());//看作用域链---有四级作用域
block是由let产生的块级作用域:只有c是11;
closure是由var产生的,b是22;
script是由let产生的类似于全局的块级作用域:b是33;
global作为全局作用域。
证明:但凡有块作用域,let就会被分到自己的块里,而本来应该相同级别处于同一作用域的var声明的变量因为不存在块级作用域,反而到了上一级。