4
爲什麼導出的箭頭功能不保留它們的名稱並且有辦法讓它們這樣做嗎?ES6模塊的箭頭功能導出不保留其名稱
舉一個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'](http://www.ecma-international.org/ecma-262/7.0/#prod-ExportDeclaration)應該自己使用與'const'相同的行爲,其中[定義爲給出名稱到匿名函數](http://www.ecma-international.org/ecma-262/7.0/#sec-let-and-const-declarations-runtime-semantics-evaluation)(參見LexicalBinding:BindingIdentifier下的步驟5 Initializer' *)。 –
喬納森是對的。 'console.log(doSomeWork3.name)'在Chromium中工作,但不在Firefox中(你得到一個空字符串)。 – Badacadabra
這是在節點6.9.2(服務器端)。我使用'babel-plugin-transform-es2015-modules-commonjs'軟件包,使用babel.js將ES6模塊轉換爲common.js格式。也許它是罪魁禍首? – TugboatCaptain