美文网首页
ES6快速学习(一)变量声明

ES6快速学习(一)变量声明

作者: slTrust | 来源:发表于2017-12-08 12:35 被阅读0次

    ES6

    代码在浏览器环境运行!代码在浏览器环境运行!代码在浏览器环境运行!
    我用的google!!!

    变量声明 let

    最最最基本用法

       let a = 11;
       alert(a);  // 11
    

    let与var的区别

        //声明后未初始化,输出相同.
        var a;
        let b;
        console.log(a); // undefined
        console.log(b); // undefined
    

    使用在声明前的异同

       console.log(a); //输出undefined  ==> 变量提升
       var a= 'test var';
    
       console.log(b); //直接报错:ReferenceError: b is not defined
       let b = 'test let';
    

    重复声明问题 在相同的函数或块作用域内重新声明同一个变量会引发SyntaxError

       var a =5;
       var a =12;
       console.log(a);//必须注释下面的其中一个let声明 
    
       let b = 3;
       let b = 666;  //报错 Identifier 'b' has already been declared 
       console.log(b)
    

    作用域问题

    除了全局作用域和函数作用域,es6新增了块级作用域,即用{ }包裹的代码块。

    块级作用域

    内层变量和外层变量的值互不影响。内层无法读取外层,外层无法读取内层。

    作用域问题

    问题1: 如果是let声明的初始化表达式 在for循环外 访问i会报错 如果var声明的就不会报错

            for(let i=0; i<10; i++){
            
            }
            //报错
            alert(i);
    

    问题2: 如果是let声明的初始化表达式 在for循环外 访问i会报错 如果var声明的就不会报错

    {
      console.log(a); //报错
        
      {let a=12;}
        
      console.log(a) //报错
    }
    

    问题3: 事件中的索引问题 ==>简化内部函数代码
    工作原理是因为(匿名)内部函数的3个实例引用了变量i的3个不同实例。

    <body>
        <script>
                var aBtn=document.querySelectorAll('input');
                for(let i=0; i<aBtn.length; i++){
                    aBtn[i].onclick=function(){
                        alert(i);  //弹出对应的  索引   
                        //如果换成var声明  就会弹出 aBtn.length ==> 3
                    };
                }
        </script>
    </head>
    <body>
        <input type="button" value="aaa">
        <input type="button" value="bbb">
        <input type="button" value="ccc">
    </body>
    

    问题4:在程序或者函数的顶层,let并不会像var一样在全局对象上创造一个属性

    var x = 'global';
    let y = 'global';
    console.log(this.x); // "global"
    console.log(this.y); // undefined
    

    const 常量

    特性

    • 声明时就需要赋值,否则报错;一旦声明不可重新赋值,否则报错;
    • 块级作用域
    • 不存在变量提升;
    • 存在暂时性死区;
    • 声明引用类型常量时,const保存的是地址,常量中的属性还是可以变的;

    块级作用域

    if(true){
        const a=12;
    }
    //报错  常量的作用域
    alert(a);
    

    重复赋值

    const a=12;
    a=5;
    alert(a); // TypeError:Assignment to constant variable.
    

    未初始化就使用

    const a;
    alert(a); // Uncaught SyntaxError: Missing initializer in const declaration
    

    相关文章

      网友评论

          本文标题:ES6快速学习(一)变量声明

          本文链接:https://www.haomeiwen.com/subject/bhfeixtx.html