• 技术文章 >web前端 >js教程

    ES6箭头函数与function有什么区别?

    不言不言2019-03-13 13:40:33转载1152
    本篇文章给大家带来的内容是关于ES6箭头函数与function有什么区别?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    1.写法不同

    // function的写法
    function fn(a, b){
        return a+b;
    }
    // 箭头函数的写法
    let foo = (a, b) =>{ return a + b }

    2.this的指向不同

    在function中,this指向的是调用该函数的对象;

    //使用function定义的函数
    function foo(){
        console.log(this);
    }
    var obj = { aa: foo };
    foo(); //Window
    obj.aa() //obj { aa: foo }

    而在箭头函数中,this永远指向定义函数的环境。

    //使用箭头函数定义函数
    var foo = () => { console.log(this) };
    var obj = { aa:foo };
    foo(); //Window
    obj.aa(); //Window
    function Timer() {
      this.s1 = 0;
      this.s2 = 0;
      // 箭头函数
      setInterval(() => {
         this.s1++;
         console.log(this);
      }, 1000); // 这里的this指向timer
      // 普通函数
      setInterval(function () {
        console.log(this);
        this.s2++; // 这里的this指向window的this
      }, 1000);
    }
    
    var timer = new Timer();
    
    setTimeout(() => console.log('s1: ', timer.s1), 3100);
    setTimeout(() => console.log('s2: ', timer.s2), 3100);
    // s1: 3
    // s2: 0

    3.箭头函数不可以当构造函数

    //使用function方法定义构造函数
    function Person(name, age){
        this.name = name;
        this.age = age;
    }
    var lenhart =  new Person(lenhart, 25);
    console.log(lenhart); //{name: 'lenhart', age: 25}
    //尝试使用箭头函数
    var Person = (name, age) =>{
        this.name = name;
        this.age = age;
    };
    var lenhart = new Person('lenhart', 25); //Uncaught TypeError: Person is not a constructor

    另外,由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。

    4.变量提升

    function存在变量提升,可以定义在调用语句后;

    foo(); //123
    function foo(){
        console.log('123');
    }

    箭头函数以字面量形式赋值,是不存在变量提升的;

    arrowFn(); //Uncaught TypeError: arrowFn is not a function
    var arrowFn = () => {
        console.log('456');
    };
    console.log(f1); //function f1() {}   
    console.log(f2); //undefined  
    function f1() {}
    var f2 = function() {}

    以上就是ES6箭头函数与function有什么区别?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:javascript
    上一篇:JavaScript如何获取字符串中出现多次的字符(代码) 下一篇:Angular中Input和Output的介绍(附代码)
    大前端线上培训班

    相关文章推荐

    • JavaScript中作用域的详细介绍(代码示例)• JavaScript模块化编程的详细介绍(代码示例)• JavaScript实现斐波那契数列的四种方法介绍(代码)• javascript变量提升的详细介绍(代码示例)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网