2017-05-20 83 views
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 
+1

這可能是引擎中的錯誤(或尚未支持的行爲)。 ['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' *)。 –

+0

喬納森是對的。 'console.log(doSomeWork3.name)'在Chromium中工作,但不在Firefox中(你得到一個空字符串)。 – Badacadabra

+0

這是在節點6.9.2(服務器端)。我使用'babel-plugin-transform-es2015-modules-commonjs'軟件包,使用babel.js將ES6模塊轉換爲common.js格式。也許它是罪魁禍首? – TugboatCaptain

回答

0

我只是想這一點,還出口讓func123 =()=> {} 和它的工作的 「常量」 和對於「讓」也是如此。 也許是你正在使用的一些配置?你使用webpack或什麼?

+0

這應該是一個評論... – Badacadabra