1

Google Chromeバージョン52 64ビットを使用しています。 私が匿名関数式exを使用すると、私はそれを知りました。Google Chromeの匿名関数式

// Anonymous function expression 
var expressionFunc = function(){ 
    return true; 
}; 

変数expressionFuncは、割り当てられた匿名関数を保持 しかし、それはまた、この関数にnameプロパティexpressionFuncを追加しています。 コンソールでexpressionFunc.nameを実行すると、 は私にexpressionFuncを与えます。

この匿名関数式は匿名のままでなければなりません。 変数によって参照される関数は、関数のnameプロパティに変数名を含むべきではありません。

匿名機能に名前のプロパティを割り当てるのはなぜですか?

+0

ここでは無名関数を作成していないことを理解しています。異なる構文で関数を宣言するだけです。標準をもう少し詳しく知っている人にとってはうれしいです。無名関数はよりよく似ています(function(){alert(true);})(); –

+1

Firefoxでの動作が異なり、明確ではないことが示唆されています。 –

+0

これは、インラインの無名関数式と呼ばれます。この関数は名前を持たないので、匿名のインライン関数であり、変数に代入するとインラインの匿名関数式になります – RuvenGam

答えて

0

このページ:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/name

はES6機能を実装し、この

ブラウザは、その構文上の位置から 無名関数の名前を推測することができます言います。たとえば:

var f = function() {}; 
console.log(f.name); // "f" 

、そのページには、特に説明がありません。

このページ

http://www.2ality.com/2015/09/function-names-es6.html

名に関しては、この

を言う、矢印機能は、匿名関数のように 式です:

 const func =() => {}; 
    console.log(func.name); // func 

これ以降、無名関数式が表示されるたびに、 は矢印関数が同じように機能するとみなすことができます。

https://stackoverflow.com/a/37488652/1048572(@bergiが参照)の回答はかなり包括的であり、仕様のソースを示しています。

+0

ブラウザはこれを行いました推論はスタックトレースにとって長いので、ES6以降はプロパティとして利用できるようになり、いつ実行するかについてのルールが設定されています。 – Bergi