zoukankan      html  css  js  c++  java
  • es6

    一.let、var

    1.let所声明的变量,只在let命令所在的代码块内有效。var命令声明的,在全局范围内都有效

    2.var存在变量提升(先引用会出现undefined),let不存在变量提升(先引用直接报错)

    3.暂时性死区   下面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。

    1 var tmp = 123;
    2 if (true) {
    3    tmp = 'abc'; // ReferenceError
    4    let tmp;
    5 }

    ES6 明确规定,如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。typeof运算符也得    变量一定要在声明之后使用,否则就报错。

    var tmp=123;
    if(true){
        tmp='abc';
        console.log(typeof tmp);    //下面若无let tmp,不报错,下面有let tmp  会因为暂时性死区导致未定义之前使用而报错
        let tmp;        
    }

    4.不允许重复声明

    function abc(res){
        {
            let res=2;
            console.log(res);
        }
    }
    abc(1);             //2
    function abcd(res){
        let res;
        console.log(res);
    } 
    abcd(1);        //报错

     补充:

    使用ES6,我们需要全面使用let/const替换var,那么什么时候用let,什么时候用const就成为了一个大家要熟练区分的一个知识点。

    我们常常使用let来声明一个值会被改变的变量,而使用const来声明一个值不会被改变的变量,也可以称之为常量。

    当值为基础数据类型时,那么这里的值,就是指值本身。
    而当值对应的为引用数据类型时,那么我这里说的值,则表示指向该对象的引用。这里需要注意,正因为该值为一个引用,只需要保证引用不变就可以,我们仍然可以改变该引用所指向的对象。

    当我们试图改变const声明的变量时,则会报错。

  • 相关阅读:
    PAT (Advanced Level) 1080. Graduate Admission (30)
    PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
    PAT (Advanced Level) 1078. Hashing (25)
    PAT (Advanced Level) 1077. Kuchiguse (20)
    PAT (Advanced Level) 1076. Forwards on Weibo (30)
    PAT (Advanced Level) 1075. PAT Judge (25)
    PAT (Advanced Level) 1074. Reversing Linked List (25)
    PAT (Advanced Level) 1073. Scientific Notation (20)
    PAT (Advanced Level) 1072. Gas Station (30)
    PAT (Advanced Level) 1071. Speech Patterns (25)
  • 原文地址:https://www.cnblogs.com/wanan-01/p/8746545.html
Copyright © 2011-2022 走看看