为什么导出的箭头函数不保留它们的名称,有没有办法让它们保留名称?
给出一个像下面这样的ES6模块:
myModule.js
如果我像这样将它们导入到另一个文件中,那么导出的函数将保留其名称,而箭头函数则不会。
示例代码如下: example.js
给出一个像下面这样的ES6模块:
myModule.js
export function doSomeWork1() {
}
export const doSomeWork2 = () => {
};
如果我像这样将它们导入到另一个文件中,那么导出的函数将保留其名称,而箭头函数则不会。
示例代码如下: example.js
import { doSomeWork1, doSomeWork2 } from './myModule';
console.log('doSomeWork1...');
console.log(doSomeWork1);
console.log(doSomeWork1.name); // name is retained
console.log('doSomeWork2...');
console.log(doSomeWork2);
console.log(doSomeWork2.name); // name is NOT retained
输出:
doSomeWork1...
[Function: doSomeWork1]
doSomeWork1
doSomeWork2...
[Function]
如果我在ES6模块中声明一个箭头函数,但不导出它并直接在该文件中打印它,它会保留其名称。
myModule.js
const doSomeWork3 = () => {
};
console.log('doSomeWork3...');
console.log(doSomeWork3);
console.log(doSomeWork3.name); // name is retained
输出:
doSomeWork3...
[Function: doSomeWork3]
doSomeWork3
export const
应该使用与单独使用const
相同的行为,其被定义为给匿名函数命名(请参见*LexicalBinding:BindingIdentifier Initializer
*下的第5步)。 - Jonathan Lonowskiconsole.log(doSomeWork3.name)
是可以工作的,但在Firefox中不行(你会得到一个空字符串)。 - Badacadabra