箭头函数和普通函数的区别?普通函数可以使用new生成实例,箭头函数可以吗,为什么?

334 阅读1分钟

  • 箭头函数没有自己的this,它里面的this是继承函数所处上下文的this(使用call和apply任何方法都无法改变this指向)

  • 回调函数中的this一般都是window

    document.body.onclick = function() {
        // this => body
        arr.sort(function(a,b){
            return a-b; // this=> window
        })
    }
    
  • 回调函数: 把一个函数B做为实参传递给函数A,函数A在执行的时候可以把传递进来的函数B执行n次

    function each(arr,fun) {
        for(let i = 0;i<arr.length;i++) {
            // fun(arr[i],i); // 当前回调函数的this => window
            let flag = fun.call(arr,arr[i],i); // 调用call改变this指向
            if(flag === false) {
                break;
            }
        }
    }
    each([20,30,10,4],function(item,index) { // 现在的话,回调函数中的this就是当前操作的数组,按理说应该是window,但是上面回调函数执行的时候,使用call改变了this的指向
        console.log(item,index); // forEach的实现原理就是这样
        if(index > 1) {
           return false;
       	}
    })
    
  • 箭头函数没有arguments(类数组/伪数组) 但是可以使用es6的拓展运算符获取传递的参数集合

箭头函数不能被 new 执行,因为箭头函数没有this,也没有prototype