关键字var和let的区别

在使用webstorm编写前端代码的时候发现使用var变量时提示换成let,于是查了一下两个的区别,顺便做一个记录:

1、var属于ES5规范,let属于ES6规范

    

2、var有预处理机制,let没有。预处理机制也就是常说的声明提前

ES6 新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束。

先看个var的常见变量提升的面试题目:

题目1:
var a = 99;            // 全局变量a
f();                   // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。 
console.log(a);        // a=>99,  此时是全局变量的a
function f() {
  console.log(a);      // 当前的a变量是下面变量a声明提升后,默认值undefined
  var a = 10;
  console.log(a);      // a => 10
}

// 输出结果:
undefined
10
99

3、作用域的不同,var是全局作用域,let是块级作用域

在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。虽然范围缩小,但是使得变量使用更加安全
例如:

{ 
  var i = 9;
} 
console.log(i);  // 9

ES6新增的let,可以声明块级作用域的变量。

{ 
  let i = 9;     // i变量只在 花括号内有效!!!
} 
console.log(i);  // Uncaught ReferenceError: i is not defined

猜你喜欢

转载自blog.csdn.net/qq_42910468/article/details/108078406