es6 双箭头函数调用有什么意义?

let getters = {
    total: (state) => (symbol) => {
        return (symbol || '$') + state.count;
    }
}

网上看到这么一段代码,不理解 为什么箭头函数后边要跟一个箭头函数,一开始以为是一个箭头函数传两个参数的特殊写法,试了试发现

getters.total(state, symbol)  // 调用不了
getters.total(state)(symbol)  //调用成功

不知道这样写有什么玄机?

阅读 12.1k
4 个回答

这段代码相当于:

let getters = {
    total: function(state) {
         return function(symbol) => {
            return (symbol || '$') + state.count;
        }
    }
}

至于为什么这么写,你需要了解一个概念:函数柯里化

如果你不了解函数柯里化,那你完全可以在定义的时候定义为:

let getters = {
    total: (state, symbol) => {
        return (symbol || '$') + state.count;
    }
}

而要完全理解函数柯里化带来的好处,你可能还要去学习函数式编程

let getters = {
    total: (state) => (symbol) => {
        return (symbol || '$') + state.count;
    }
}

其实就是

let getters = {
    total: (state) => {
        return (symbol) => {
                    return (symbol || '$') + state.count;
                }
    }
}

第一个参数是state的函数调用后会返回一个函数(就是参数是symbol的这个函数),所以你连续调用可以成功
箭头函数在不写{} 的情况下,可以省略return关键字,而默认return接下来的东西

新手上路,请多包涵

let after1 ={
getter:function (state) {

  return function (symbol) {
      return (symbol || "$") + state.count;
  }

}
};

双箭头函数本身没有context. this指向定义时所处的context.

推荐问题