1

我正在使用Google Chrome版本52 64位。 我發現,如果我使用匿名函數表達式ex。Google Chrome中的匿名函數表達式

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

變量expressionFunc將持有指定的匿名函數, 但它也加入了名稱屬性expressionFunc這個功能。 所以,如果我在控制檯expressionFunc.name, 它會給我expressionFunc

從我所知道的這個匿名函數表達式應該保持匿名, 而變量引用的函數不應該在函數的name屬性中包含變量名稱。

爲什麼chrome將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