エクスポートされた矢印関数の名前がのままになっているのはなぜですか?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
これはエンジンのバグ(またはまだサポートされていない動作)の可能性があります。 ['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.jsを使用して、 'babel-plugin-transform-es2015-modules-commonjs'パッケージを使用してES6モジュールからcommon.jsフォーマットに移行しています。たぶんその犯人? – TugboatCaptain