2017-05-20 5 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 

出力:私はそれをエクスポートせずにES6モジュールの矢印関数を宣言し、その中で直接それをプリントアウトした場合

doSomeWork1... 
[Function: doSomeWork1] 
doSomeWork1 
doSomeWork2... 
[Function] 

それはその名前を保持しています。

myModule.js

const doSomeWork3 =() => { 
}; 
console.log('doSomeWork3...'); 
console.log(doSomeWork3); 
console.log(doSomeWork3.name); // name is retained 

出力:私はそれを試してもエクスポートfunc123 =()=> {} をさせ、それは "CONST" のために働い

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.jsを使用して、 'babel-plugin-transform-es2015-modules-commonjs'パッケージを使用してES6モジュールからcommon.jsフォーマットに移行しています。たぶんその犯人? – TugboatCaptain

答えて

0

と"let"のためにも。 多分使用している設定ですか?あなたはwebpackや何かを使っていますか?

+0

これはコメントにする必要があります... – Badacadabra

関連する問題