ES6中如何导入非命名非默认的匿名导出函数?
如何在ES6中导入匿名函数的导出?
嘿,这个问题问得很有意思!首先得纠正一个关键问题:你写的file-3.js里的代码其实是语法无效的——ES6模块的命名导出规则里,直接export function() {}这种匿名函数写法是不被允许的,因为命名导出需要绑定一个可识别的标识符(简单说就是得有名字),匿名函数没有标识符,JS引擎会直接抛出语法错误。
那如果我们就是想导出没有显式名字的函数,该怎么处理呢?有几种可行的方案:
方案1:给匿名函数补全名称,转为标准命名导出
最简单的方式就是给函数加上名字,变成规范的命名导出:
// file-3.js export function sayHello() { return 'Hello'; } export function askStatus() { return 'How are you doing?'; }
然后在其他文件里就可以通过解构导入指定的函数:
import { sayHello, askStatus } from './file-3.js'; console.log(sayHello()); // 输出 "Hello" console.log(askStatus()); // 输出 "How are you doing?"
方案2:将匿名函数赋值给变量后导出
如果不想给函数本身起名字,也可以把匿名函数赋值给变量,再导出这个变量:
// file-3.js - 方式A:直接导出变量 export const func1 = () => 'Hello'; export const func2 = () => 'How are you doing?'; // file-3.js - 方式B:先定义再批量导出 const greet = () => 'Hello'; const check = () => 'How are you doing?'; export { greet, check };
导入方式和命名导出完全一致,用解构即可:
import { func1, func2 } from './file-3.js'; // 或者 import { greet, check } from './file-3.js';
方案3:用默认导出包裹匿名函数集合
如果想一次性导出多个匿名函数,还可以把它们放进数组或对象里,用export default导出整个集合:
// file-3.js - 数组形式 export default [ () => 'Hello', () => 'How are you doing?' ]; // file-3.js - 对象形式(更推荐,可读性更强) export default { greet: () => 'Hello', inquire: () => 'How are you doing?' };
导入的时候直接接收整个集合,再按需调用:
// 数组形式导入 import anonFuncs from './file-3.js'; console.log(anonFuncs[0]()); // "Hello" console.log(anonFuncs[1]()); // "How are you doing?" // 对象形式导入 import anonFuncs from './file-3.js'; console.log(anonFuncs.greet()); console.log(anonFuncs.inquire());
总结一下:ES模块不支持直接导出无标识符的匿名函数,必须通过给函数命名、绑定到变量,或者包裹在集合里默认导出这几种方式,才能合法导出并在其他文件中导入使用。
内容的提问来源于stack exchange,提问作者darKnight
相关产品推荐
相关产品推荐

