在很多文档中都可以看到这种结构的语句
export default DropTarget(types, spec, collect)(MyComponent2);
但是我不是很明白,查看了文档也找不到有描述这样的语法
export default OneClass(arg)(arg);
我的理解是exprot 一个立即执行函数吗?就好像js的立刻执行函数一样,但是这样好像又不是很合理,因为import的时候就不是一个变量了.
(function(){})()
在很多文档中都可以看到这种结构的语句
export default DropTarget(types, spec, collect)(MyComponent2);
但是我不是很明白,查看了文档也找不到有描述这样的语法
export default OneClass(arg)(arg);
我的理解是exprot 一个立即执行函数吗?就好像js的立刻执行函数一样,但是这样好像又不是很合理,因为import的时候就不是一个变量了.
(function(){})()
export
和export default
都是输出变量,不同的是export
是直接输出这个变量,但是export defaul
t命令的本质是将后面的值,赋给default
变量,然后输出.可以参考一下这个ES6 Module --阮一峰
不妨拆分开来理解,相当于如下代码:
// 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);
8 回答4.4k 阅读✓ 已解决
6 回答2.9k 阅读✓ 已解决
5 回答2.5k 阅读✓ 已解决
5 回答6.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答2.4k 阅读
4 回答2.7k 阅读✓ 已解决
正常看到应该是
上面
不同之处在于
OneClass(arg)(arg)
, 这种调用方式类似函数柯里化,接受多个参数后,最终肯定会return result
,这么看,上面两种导出方式就差不多了