箭头函数和普通函数的区别
- 箭头函数语法上比普通函数更加简洁(ES6中每一种函数都可以使用形参赋默认值和剩余运算符)。
- 箭头函数没有自己的this,它会捕获自己在定义时(注意,是定义时,而不是调用时)所处上下文的this,并继承这个值(使用call/apply等任何方式都无法改变this的指向)所以,箭头函数中的this指向在它被定义的时候就已经确定,之后永远也不会变。
代码如下:1 2 3 4 5 6 7 8 9
let obj = { name: "Mike"} function fn1() { console.log(this) } fn1.call(obj) //输出结果:this指向obj let fn2 = () => { console.log(this) } fn2.call(obj) //输出结果哦:this仍然指向window
- 箭头函数中没有arguments(类数组),只能基于…arg获取传递的参数集合(数组)
代码如下:1 2 3 4 5
let fn = (...arg) => { console.log(arg)//输出结果:[10, 20, 30] //如果直接console.log(arguments),会报错 } fn(10, 20, 30)
- 箭头函数不能作为构造函数,不能使用new(因为:箭头函数没有this,其中最重要是也没有prototype)
- PS:回调函数:把一个函数B作为实参传递给另外一个函数A,函数A在执行时,可以把传进来的函数B在函数A里面执行
代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14
function each(arr, callBack){ for(let i = 0; i < arr.length; i++){ let flag = callBack.call(arr, arr[i], i)//首先使用call方法改变this指向,再用flag接收回调函数返回的结果,如果是false,结束循环(因此可以用来控制当前循环结束与否) if(flag === false){ break; } } } each([10,20,30,40], callBack(item, index){ //在函数each里面通过call方法改变回调函数callBack的this指向,现在this指向原始操作数组,即arr if(index > 1){ return false } })