美文网首页
2020-01-05 ES6

2020-01-05 ES6

作者: 月圆星繁 | 来源:发表于2020-01-05 21:44 被阅读0次

    let 和 const

    let命令

    let 声明变量,在let命令所在的代码块内有效。
    var 声明变量,全局作用域有效。

    {
        var a = 1;
        let b = 2;
    }
    a //   1 
    b //   referenceError: a is not defined.
    
    /*************************************************************************/
    var a = [ ];
    for(var i = 0; i<10; i++) {
        a[i] => function(){
           console.log(i);
       }
    }
    a[5]();   // 10
    
    var b = [];
    for(let i=0;  i<10; i++ ) {
        b[i] = function() {
           console.log(i);
       }
    }
    b[5]();    // 5
    
    /*************************************************************************/
    /*let 命令声明的变量一定要在声明后使用,否则就会报错*/
    console.log(foo); 
    var foo = 2;  // undefined
    
    console.log(bar);
    let bar = 4;  // referenceError
    
    /*************************************************************************/
    
    /*只要块级作用域内存在let命令,它所声明的变量就绑定了这个区域,不再受外部的影响*/
    var temp = 123;
    if(true) {
      temp = 'aaa';  // referenceError;
      let temp; 
      console.log(temp); //undefined
    }
    
    let x = x;   // ReferenceError: x is not defined;
    
    /*************************************************************************/
    /*let 不 允许在相同作用域内重复声明同一个变量,不能在函数内部重新声明参数*/
    // 报错
    function () {
      let a = 2;
      var a = 3;
    }
    //报错
    function() {
       let a = 10;
       let a = 2;
    }
    

    const命令

    const 声明一个只读常量。一旦声明,常量的值就不能改变,并不是变量的值不得改动,而是变量指向的内存不能改动。对于简单的数据类型(数值、字符串、布尔值)而言,值就是保存在变量指向的内存地址中,因此等同于常量。但对于复合类型的数据(对象和数组)而言,变量指向的内存地址保存的是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,这个完全不能控制。

    const PI = 3.01415926;
    console.log(PI);  //3.01415926
    PI=3;  // TypeError: Assignment to constant variable.
    
    /*const声明变量只声明不赋值就会报错*/
    const foo;
    
    /**const的作用域与let相同:只在声明所在的块级作用域内有效**/
    if(true){
        const MAX = 5;
    }
    console.log(MAX);  //MAX is not defined
    

    函数

    ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。

    function log(x, y) {
        y = y || 'world';
        console.log(x,y);
    }
    log('hello');  // hello world
    log('hello','aaa');  // hello aaa
    log('he',' ');   // hello world
    

    ES6 允许为函数的参数设置默认值,直接写在参数定义的后面。

    function log(x, y = 'world') {
       console.log(x, y);
    }
    
    log('hello');
    log('hello', 'China');
    log('hello', ' ');
    

    ES6比ES5简洁自然。参数默认值的位置,通常情况下,应该是函数的尾参数。

    箭头函数

    基本用法

    // 使用(=>)定义函数。
    var f = v => v;
    // 等同于:
    var f = function (v) {
      return  v;
    }
    

    如果箭头函数不需要参数或者需要多个参数,就使用圆括号代表参数部分

    var f = () => 5;
    //等同于
    var f = function() { return 5; }
    
    var sum = (a,b) => a +b;
    //等价于
    var sum = function(a+b) {
      return a+b;
    }
    

    如果箭头函数的代码块部分多于一条语句,就要使用大括号将其括起来,并使用return 语句返回。
    var sum = (a,b)=> { return a+b; }
    由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号。
    var getTempItem = id => ({ id:id, name: "Temp" });

    待补充...

    Promise

    相关文章

      网友评论

          本文标题:2020-01-05 ES6

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