• ES6 块状绑定


    var

    var  声明变量,被视作在函数级作用域内顶部的位置发生(如果不包含在函数内则为全局作用域内

     1 <script>
     2     getValue();
     3     function getValue(){
     4         const a=4;
     5         if(a>3){
     6             var val='dxj';
     7             console.log(val);
     8             return val;
     9         }else{
    10             console.log(val);
    11             return val;
    12         }
    13     }
    14 </script>

    事实上,JS引擎对代码做了如下调整,变量提升,else也可访问到,但其未初始化和赋值,因此undefined

    //js引擎对以上函数做了调整
        function getValue(condition){
            var val;
            if(condition){
                val='dxj';
                console.log(val);
                return val;
            }else{
                console.log(val);
                return val;
            }
        }

    循环中使用var

    //error
    var
    funcs=[]; for (var i = 0; i < 10; i++) { funcs.push(function(){ console.log(i); }); } funcs.forEach(function(func){ func();//输出十次 10 })
    //处理过后
    var
    funcs=[]; for (var i = 0; i < 10; i++) { funcs.push((function(value){ return function(){ console.log(i); } }(i))); } funcs.forEach(function(func){ func();//输出0,1..9 })

    let

    语法和 var 完全一致,但是变量的作用域会限制在当前的代码块中,不会发生变量提升
     getValue(true);
        function getValue(condition){
            if(condition){
                let val='dxj';
                console.log(val);
                return val;
            }else{
                console.log(val);
                return val;
            }
        }

    注意:

       若一个标识符在当前作用域里已经存在,那么再用 let 声明相同的标识符或抛出错误
         

      正常代码如下:

      

    循环中使用let,同样适用于for-in和for-of

    1     var funcs=[];
    2     for (let i = 0; i < 10; i++) {
    3         funcs.push(function(){
    4             console.log(i); 
    5         }); 
    6     }
    7     funcs.forEach(function(func){
    8         func();//输出0,1,2..9
    9     })

     const

     声明变量,不会发生变量提升,会被当做常量,不能再次被赋值,因此声明变量要初始化

    const count=10;
    //未初始化
    const count;
     也不能对已存在的标识符重复定义
    var a=7;
    //语法错误
    const a=3;
    
    let  b=5;
    //语法错误
    const b=7;
     const 声明只是阻止变量和值的再次绑定而不是值本身的修改,不能限制对于值的类型为对象的变量的修改
    const person={
        name:'rt';
    }'
    person.name='yu';

    循环中使用const(以下示例会报错),同样适用于for-in和for-of(不会报错)

    var funcs=[];
         for (const i = 0; i < 10; i++) {
             //会报错
           funcs.push(function(){
                console.log(i); 
             }); 
         }
         funcs.forEach(function(func){
             func();
         })

  • 相关阅读:
    Storybook 最新教程
    Monorepo All In One
    zsh & git alias
    vue-cli emit webpack config
    iflab隔壁ios组新生面试题
    [转]sprintf
    python版归并排序
    关于linux下GCC生成共享库(动态链接库)的探究
    ubuntu不小心删除了libc-bin的恢复办法
    python实现栈
  • 原文地址:https://www.cnblogs.com/dxjx/p/12493007.html
Copyright © 2020-2023  润新知