let和var的区别

在JavaScript中,定义变量的关键词一般用var,但还有一种定义变量的关键词叫let。两者的作用域范围不一样,我们可以将var理解为定义的是一个全局变量,而let定义的是一个局部变量。故let常用于函数体中,使得变量的作用域仅限于函数体内。下面通过一小段代码展示他们的作用范围。

  a();
  function a() {
       let a = 'dd';
       var b = 10;
       alert(b);
          }
 alert(a); // 报错,b is not defined
 alert(b);//成功打印10

可以看到,函数体内用var定义的变量是一个全局内,故可在函数外被打印;而let定义的变量进作用于函数体内,故在函数体外被打印回报出a没有定义的错误。

下面再深入介绍下二者的区别:

  • 声名变量的提升区别:

var声名的变量在解析时会初始化变量,并赋予undefined,但let定义的变量在解析时不会被初始化。

alert(a);//打印undefined
alert(b);//报出未定义的错误
var a = 1;
let b = 2;
alert(a);//打印1
alert(b);//打印2
  • 重复声名变量的区别

var可以重复声明一个变量,但let在一个作用域里不能重复声名同一个变量,不然会报错。

        var a = 1;
        var a = 5;
        let b = 2;
        let b = 8; //重复声名会报错,因为b变量已被定义
        alert(a); //打印5
        alert(b);

 

posted @ 2018-11-21 13:14  龙~白  阅读(195)  评论(0编辑  收藏  举报