美文网首页
箭头函数

箭头函数

作者: luckySnail | 来源:发表于2017-07-19 17:01 被阅读0次
    箭头函数其实就是简写的函数表达式。且箭头函数不会新产生自己作用域下的this,arguments,super或者new.target

    基础语法:
    1.  (param1, param2, …, paramN) => expression  等同于: (param1, param2, …, paramN) => {return expression; }
     删除大括号,它就是一个隐式的返回值,不需要指定我们返回 
    2. 如果只有一个参数,圆括号可省略
    (singleParam) => { statements; } 等同于:singleParam => { statements; }
    3.如果箭头函数没有参数,圆括号不能省略,如果不使用圆括号可以使用_下划线
    () => { statements; } 或_ => { statements; }
    
    高级语法:
    1. 返回值是对象的情况下,函数体外要加圆括号
    const foo1 = a => {b:10};
    console.log(foo1());//undefined
    
    const foo2 = a => ({b:10});
    console.log(foo2());//Object {b: 10}
    
    2.支持 Rest parameters 和 default parameters
    (param1, param2, ...rest) => { statements }  
    (param1 = defaultValue1, param2, …, paramN = defaultValueN) => { statements }  
    
    this的区别:
    在箭头函数之前,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this指向谁,this最终指向的是那个调用它的对象
    比如新建个test.js,内容为:
    function Person() {  
      this.age = 0;  
      setInterval(function growUp() {  
        this.age++;   
        console.log(this.age);
      }, 1000);  
    } 
    var p = new Person();  
    执行该js会每隔一秒console一次NaN,原因就是 growUp() 函数定义了其内部的 `this`。
    想解决这个问题可以用之前常用的把this赋值给一个别的变量比如self或者that,然后growUp里用新的变量代替this,如下:
    function Person() {  
     const that = this;
      that.age = 0;  
      setInterval(function growUp() {  
        that.age++;   
        console.log(that.age);
      }, 1000);  
    }   
    var p = new Person();  这样执行该js每隔会输出1 2 3……
    
    或者可以使用箭头函数解决,因为箭头函数不会新产生自己作用域下是this,箭头函数会捕获其所在的上下文中的this值,作为自己的this值,所以这个问题就很愉快的解决了。代码如下:
    function Person() {  
      this.age = 0;  
      setInterval(() => {  
        this.age++;   
        console.log(this.age);
      }, 1000);  
    } 
    var p = new Person();  
    
    不绑定arguments:

    箭头函数不会在其内部暴露出参数(比如: arguments.length, arguments[0]
    等等,都不会指向箭头函数的 arguments,而是指向了箭头函数所在作用域的一个名为 arguments 的值(如果有的话,否则,就是 undefined。——官网文档)举例如下:

    var arguments = 1;
    var foo = () => arguments;
    console.log(foo());//1
    
    function foo1() {
      var f = (i) => arguments[0]+i; 
      return f(2);
    }
    
    console.log(foo1(1)); //3
    
    箭头函数不能用作构造器,和new一起使用会报错。
    var Foo = () => {};
    var foo = new Foo(); 
    // TypeError: Foo is not a constructor
    
    箭头函数没有原型属性
    var Foo = () => {};
    console.log(Foo.prototype); 
    // undefined
    
    箭头函数在参数和箭头之间不能换行
    var func = ()
               => 1; 
    // SyntaxError: expected expression, got '=>'
    

    相关文章

      网友评论

          本文标题:箭头函数

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