技術的には問題ありません。
var myFunction = function() { } //anonymous
と
var myFunction = function myFunction() { } //named
1以外のすべての点で同じになります - デバッグツールを使用して、スタックトレースを見ていると、異なる識別子が表示されます。最初のバージョンは(anonymous function)
と表示され、後者の名前はmyFunction
と表示されます。したがって、名前付き関数は開発者の便宜と開発のためだけに使用されます。あなたは
var myFunction = function someOtherName() { /* ... */ }
を持つことができ、これは、開発ツールでsomeOtherName
として表示されます例えば、関数の名前は、それへの参照と同じである必要はないことは注目に値する
。しかし、を使ってをにすることはできません。機能の名前と参照は別のものです。簡単にするため、通常は同じ識別子に設定されます。
今、あなたの例に - はは、あなたがこれはという名前の関数と等価ではありません
function myFunc() {
this.myMethod =() => {
//..
}
}
掲示ものに差があります。これはES6矢印の機能を使用している - 通常、彼らが割り当てられている変数と同じ名前が付けられます。
var arrowFunction =() => {};
var obj = {
arrowMethod:() => {}
}
console.log("function name is: " + arrowFunction.name);
console.log("object property function name is: "+ obj.arrowMethod.name);
(これは、いくつかのためにChromeでなく、Firefoxで動作することに注意してください理由 - .name
プロパティが設定されているものとする)命名の違いに
さらには、矢印の機能は、「プレーン」の機能に他の違いがあります。最も顕著なのは、そのコンテキストが語彙的に結合されていることです。ここでは、これが実際に何を意味するのか
function arrowExample() {
this.data = "Hello arrow";
this.myMethod =() => {
return this.data;
}
}
function normalFunctionExample() {
this.data = "Hello normal function";
this.myMethod = function myMethod() {
return this.data;
}
}
var arrowInstance = new arrowExample();
var normalFunctionExampleInstance = new normalFunctionExample();
console.log("Invoking arrow with context: " + arrowInstance.myMethod());
console.log("Invoking normal function with context: " + normalFunctionExampleInstance.myMethod());
var arrowReference = arrowInstance.myMethod;
var normalFunctionReference = normalFunctionExampleInstance.myMethod;
console.log("Invoking arrow without context: " + arrowReference());
console.log("Invoking normal function without context: " + normalFunctionReference());
はどちらも、あなたの 'myMethod'機能は、匿名式ですか? – Bergi
^右、MDNによると、矢印構文を使用すると、これを別の変数に参照して後で使用する手間が省けます。 非矢印機能は、ES5の構文からなので、あなたはES6は常に矢印関数を使用使用している場合、何かを破るつもりはないが、それは 'this'を参照であなたをお手伝いします。 – Diabolic
@Diabolic _ "ES6は常に矢印機能を使用していて、何も破壊しない" _これは正しくありません。定義された 'this'値でコールバックが呼び出された場合、矢印関数は' this'に対して「間違った」値を持ちます。 – zeroflagL