es6 export 问题

在很多文档中都可以看到这种结构的语句

export default DropTarget(types, spec, collect)(MyComponent2);

但是我不是很明白,查看了文档也找不到有描述这样的语法

export default OneClass(arg)(arg);

我的理解是exprot 一个立即执行函数吗?就好像js的立刻执行函数一样,但是这样好像又不是很合理,因为import的时候就不是一个变量了.

(function(){})()
阅读 3.2k
5 个回答

正常看到应该是

  export default result

上面

export default OneClass(arg)(arg);

不同之处在于OneClass(arg)(arg) , 这种调用方式类似函数柯里化,接受多个参数后,最终肯定会return result,这么看,上面两种导出方式就差不多了

exportexport default都是输出变量,不同的是export是直接输出这个变量,但是export default命令的本质是将后面的值,赋给default变量,然后输出.可以参考一下这个ES6 Module --阮一峰

OneClass返回了一个函数,这种写法是函数式编程的高阶函数吧

不妨拆分开来理解,相当于如下代码:

// DropTarget 返回一个函数
var wrapper = DropTarget(types, spec, collect);
// wrapper 返回一个包装后的组件
var result = wrapper(MyComponent2);
// 导出组件
export default result;

高阶函数,可以看成是连续执行,然后每次都是返回一个新的函数。

let OneClass = (arg1) => {
    // do something;
    return (arg2) => {
        // do something;
        return something;
    }
}

export default OneClass(arg1)(arg2);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏