js ES6中 let var const

39 篇文章 1 订阅

js ES6中 let var const

var 和let

ES6 新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效

与 var 相比,let 和 const 不存在变量提升。变量提升,指的是在变量声明之前就可以使用,只是,在声明之前,变量的值为undefined。var 声明的变量,在全局范围内都有效,而 let 声明的变量,只在 let 所在的作用域内有效。

首先来看var的变量提升:

 var a = "你好!";
      function fn(){

          console.log(a); // 使用a
          //首先查看函数内部有没有定义这个a 变量提升

          if(false){
              var a = "扣肉!"; 
          }
      }
      fn(); //输出undefined

这里吧if语句中的var a提升到到了consol的前面,相当于在consol的前面 有着 var a 但没有对a进行赋值。

作用域提升 只是把定义 放在前面 赋值还是原来的位置

for(var i = 0; i < 10; i++) {
    console.log(i)
}
console.log(i); // 10

es6为js新增了块级作用域

   function fn() {
          let a = 5;

          if (true) {
            //let a = "扣肉!"; 
            console.log(a); //输出扣肉
          }
          console.log(a); //输出5
        }
        fn();

允许块作用域可以任意嵌套

    	{
            {
                let a = "1";
            }
              let a = "2";
              console.log(a);
        }
var a = [];
      for (let i = 0; i < 10; i++) {
        a[i] = function () {
          console.log(i);//输出1 ,2,3,4,...10;
        };
          //若讲let换成var 则i为全局变量输出的是10。
      }

另外let不存在变量提升:

   console.log(b); //
        var b = 1;

       var b;
       console.log(b)
       b = 1

        console.log(c); //
        let c = 2;

暂时性死区

只要块级作用域里面存在let声明 ,它所有声明的变量就会绑定这个区域 不再受外部影响

     var a1 = "苹果";
      if(true){
          a1 = "小欧"; //这一行代码就是一个死区
          let a1; // 变量的赋值 就是使用a1 ES6 规定必须要先声明 再去使用
      }
      console.log(a1);

另外let不能声明同样的变量名

{报错

​ let a = 1;

​ let a = 2;

​ }

 var a = 0;
        // ES5 全局的变量 是挂在 window下面 
        console.log(window.a);
        let b = 1; 
        console.log(b);
        {
            console.log(b);
        }
const

const定义的变量不可以修改,而且必须初始化

const b = 2;//正确
 // const b;//错误,必须初始化 
 console.log('函数外const定义b:' + b);//有输出值
 // b = 5;
 // console.log('函数外修改const定义b:' + b);//无法输出 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值