2015-12-21 164 views
2

可能不是有史以來最好的問題,但我在這裏有一個疑問。javascript匿名函數變量分配

有什麼區別寫這篇:

var myFunction = function myFunction() {}; 
myFunction.instance = null; 

這:

var myFunction = function() {}; 
myFunction.instance = null; 

編輯:仔細閱讀請,這是不是這樣var functionName = function() {} vs function functionName() {} 上面的鏈接被解釋吊裝一式兩份,這裏是關於兩個懸掛函數的分配,一個是匿名的,一個不是。

+0

您真的關心'myFunction.instance = null;'或者只是函數定義 – Tushar

+0

@Tushar OP關注'function myFunction(){}'vs'function(){}' –

+0

@BhojendraNepal,這是沒有說的Q. – Tushar

回答

5

沒有區別。

在這兩種情況下,一個新的函數對象創建(通過函數表達式),分配給一個變量,然後通過屬性分配進行變異。

唯一的區別是一個功能具有分配一個名稱,其可以證明是有用的:參見myFunction.namemyFunction.toString(),或內訪問myFunction功能範圍。由於它是一個函數表達式(與函數聲明相對),名稱與定義範圍中的變量無關; 傳統瀏覽器的注意事項在其他地方介紹。

+0

你大多是正確的,但是說「不,沒有區別」,然後「唯一區別」有點奇怪。不同之處在於(1)命名函數對調試非常有用,但(2)它們可能會導致舊版瀏覽器出錯。其中的第二個是非常重要的(例如:http://stackoverflow.com/a/8548848/2407870)。 –

+0

是的,這與大多數事情沒有關係,但是OP沒有具體說明他關心的差異,所以它可能是相關的。 –

+0

這很清楚,不要浪費時間在這樣的事情上真的= D謝謝 –

1

不是。

主要的區別是你的代碼(一個聲明是更長的時間),因爲存儲功能爲變量的大小忽略了實際的函數名:

var a = function b() {}; 
console.log(b); // Uncaught ReferenceError: b is not defined(…) 

在你的情況出現相同的原因是您正在使用相同的變量名兩者,因此您的變量將指向功能

另一個區別是值從myFunction.toString()myFunction.name返回,因爲pointed out by user2864740

var a = function b() {}; 
console.log(a.toString()); // "function b() {}" 
var c = function() {}; 
console.log(c.toString()); // "function() {}" 
+0

nothign其他區別比嗎?=/ –

+0

謝謝,清楚的答案 –

+0

@FrançoisRichard沒問題,很高興幫忙。 – nem035