這些有什麼區別?Javascript:var myFunc = function()vs var myFunc = function myFunc()
var myFunc = function() {
// ...
};
與
var myFunc = function myFunc() {
// ...
};
在第二個例子,arguments.callee.caller.name
作品,但不是第一個。第二種語法有什麼問題嗎?
這些有什麼區別?Javascript:var myFunc = function()vs var myFunc = function myFunc()
var myFunc = function() {
// ...
};
與
var myFunc = function myFunc() {
// ...
};
在第二個例子,arguments.callee.caller.name
作品,但不是第一個。第二種語法有什麼問題嗎?
在函數文本的name
是可選的,如果忽略在第一種情況下,你顯示功能,據說是匿名。
這是從JavaScript: The Good Parts by Douglas Crockford:
甲字面函數具有四個部分。第一部分是保留字功能。可選的第二部分是函數的名稱。該函數可以使用它的名稱來遞歸地調用它自己。調試器和開發工具也可以使用該名稱來識別該功能。如果一個函數沒有給出一個名字,如前面的例子所示,它被稱爲匿名。
你提到了我最喜歡的書之一;謝謝。我將回顧這一部分。 – vcardillo
第一個功能不是有一個名字。
將函數分配給變量不會給函數一個名稱。
第二個有一個名字,而第一個沒有。函數是具有屬性name
的對象。如果該函數是匿名的,那麼它沒有名字。
var a = function(){}; // anonymous function expression
a.name; //= empty
var a = function foo(){}; // named function expression
a.name; //= foo
那麼......名字? –
'var func = function F(){};'將使'F()'在功能塊內部可用,但不在外部。 – Passerby
'arguments.callee'已棄用,因此如果您需要這種功能,請使用命名函數表達式。 – finishingmove