今天看到一段代码,不太明白

export function createAction(type, payloadCreator = a => a, metaCreator) {
  return (...args) => {
    const action = {
      type,
      payload: payloadCreator(...args)
    };
    if (typeof metaCreator === 'function') {
      action.meta = metaCreator(...args);
    }
    return action;
  };
}

不太明白 return里的 ...args参数 是哪里来的

阅读 3k
5 个回答

很明显这个参数...args是函数createAction调用之后,再次调用,然后才传入的。

如下:

var action = createAction();
action(/* 这里传入args */);

建议了解一下函数柯里化

function foo() {
    return function(...args) {
        console.log(...args);
    }
}
foo()(1,2,3);

// 进一步分解
function foo(a, ...args) {
    console.log(a, ...args);
}
foo(1,2,3);

// ...是剩余参数的意思,具体看下es6语法

图片描述

相当于

    function createAction(type, payloadCreator = a => a, metaCreator) {
            return (...args) => {
                console.log(...args)
                const action = {
                type,
                payload: payloadCreator(...args)
                };
                if (typeof metaCreator === 'function') {
                action.meta = metaCreator(...args);
                }
                return action;
            };
            }
            var aaa =createAction();
            aaa('a','b','c');
function createAction(){
  return (...arg)=>{
    console.log(...arg)
  }
}

var action =createAction()

var arr = [1,2,3]
action(arr)

去掉眼花缭乱的,看个根本

export 了一个函数的实现,这里的 ...args 就是实例化的函数传入的参数。
在这里好像就是一个偏函数的概念吧?

推荐问题