6、箭头函数和普通函数的区别

  • 箭头函数语法上比普通函数更简洁(ES6中每种函数都可以形参赋默认值和使用…剩余运算符)
function fn(x){
  return function(y){
    return x+y
  }
}

let fn = x => y=>x+y
  • 箭头函数中没有this,它里面出现的this从属于所属上下文 (使用call、apply等任何方式都无法改变this指向)
let obj = {
  name:'smileyqp'
}
function fn1(){
  console.log(this)
}
fn1.call(obj)        //this =>  obj

let fn2 = ()=>{
  console.log(this)
}
fn2.call(obj)  //this  => window
  • 箭头函数中没有Arguments类数组,只有基于…arg传递的参数集合(数组)
let fn = (...arg ) =>{
  console.log(arg)        // [10, 20, 30]
}
fn(10,20,30)
  • 箭头函数不能被new执行,因为箭头函数没有this也没有prototype
function Fn (){
  this.X = 100;
}
fn.prototype.getX = function(){}
let f = new Fn;

思考题拓展:

题目一:数组上实现一个each方法,实现下面的三个要求

let arr = [10,20,30,'AA'],
        obj = {};
arr = arr.each(function(item,index){
  // this => obj  1、第二个参数不传,this指向window
  if(!isNaN(item)){
    return false;     //2、如果不是数字,那么返回的是false
  }
  return item*10;        //3、返回结果是啥就把数组中当前项替换掉
},obj)

//这个方法最后实现的结果是 [100,200,300,false]
题目二:重写replace,replace([REG正则],callback)
let str = 'smileyqp2019smile2020'
str = str.replace(/smile/g,function(...arg){
  //arg中存储了每一次大正则匹配的信息和小正则匹配的信息

  return ; //返回把正则匹配的替换后的字符串
})

results matching ""

    No results matching ""