繁体   English   中英

用JavaScript导出动态名称

[英]Export dynamic name in Javascript

假设我们必须导出大量名称。

export const fn0 = fn.bind(null, '0');
export const fn1 = fn.bind(null, '1');
...
export const fn999 = fn.bind(null, '999');

是否可以导出如下的动态名称?

// array is [0 to 999]
array.forEach(i => export const [`fn${i}`] = fn.bind(null, i.toString());

坦率地说,不。 这是设计使然。

该模块的语法旨在进行静态分析 这意味着无需执行任何代码即可确定其他模块需要哪些模块。 这在所谓的“树摇动”中具有巨大的优势,在“摇树”中 ,可以根据实际使用的内容有选择地导入代码(并且此功能由汇总器webpack之类的模块捆绑器使用 )。

这是ES6模块与commonjs不同的关键方式。 如果您require库中的方法,则文件中的所有内容都会运行,而不仅仅是您使用的内容。 如果从库中import函数,则(应该)仅获得该函数。 如果必须运行所有代码以找出要导出的内容,则无法执行此操作。

这里引用

ECMAScript 6为您提供了两全其美的优势:Node.js的同步语法以及AMD的异步加载。 为了使两者都实现,ES6模块在语法上不如Node.js模块灵活:导入和导出必须在顶层进行。 这意味着它们也不是有条件的。 此限制使ES6模块加载器可以静态分析模块导入了哪些模块,并在执行其主体之前加载它们。

let fnCollection = {};
function fn(){
  return "welcome js"
}
[1,2,3,4].forEach(i =>fnCollection[`fn${i}`] = fn.bind(null, i.toString()));
export default fnCollection ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM