本文共 913 字,大约阅读时间需要 3 分钟。
注:let和const是ES6提出的。
Ⅰ、是否存在变量提升?
console.log(a); // undefined ===> a已声明还没赋值,默认得到undefined值var a = 100;console.log(b); // 报错:b is not defined ===> 找不到b这个变量let b = 10;console.log(c); // 报错:c is not defined ===> 找不到c这个变量const c = 10;
Ⅱ、是否存在暂时性死区?
let和const存在暂时性死区。即只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。( let 命令声明变量之前,该变量都是不可用的。 这在语法上,称为 “暂时性死区”。形成封闭的作用域)。 总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。var tmp = 123;if (true) { tmp = 'abc'; // ReferenceError let tmp;}//以上代码if后面{}形成了块级作用域,由于使用let声明了tmp,则这个变量就绑定了块区域,在声明之前使用,会报错。
Ⅲ、是否允许重复声明变量?
var允许重复声明变量。 let和const在同一作用域不允许重复声明变量。var f = 4;var f = 5;console.log(5) //5let g = 6;let g = 7;console.log(7) //SyntaxError: Identifier 'g' has already been declaredconst h = 8;const h = 9;console.log(h) //SyntaxError: Identifier 'g' has already been declared
Ⅳ、是否存在块级作用域?
var不存在块级作用域。 let和const存在块级作用域。
转载地址:http://cxlji.baihongyu.com/