[英]Why would you assign a function to a variable instead of declaring a named function?
我為什么要這樣做:
var myfunc = function() { /* code */ };
...
myfunc();
代替這個:
function myfunc() { /* code */ }
...
myfunc();
相對於其他使用,有什么好處嗎? 我已經看到了在不同地方使用的兩個示例。
據我所知,唯一的區別是匿名函數不能遞歸調用自身,而命名函數可以。 結合了這三種的構造是第三種類型,即可以有一個命名函數表達式:
var myfunc = function myfunc() { /* code */ };
如果正常聲明了一個函數,則即使重新聲明了該標識符,該函數名(其標識符)也將不可刪除。 該標識符僅在其作用域結束時才會被刪除。
function myfunc() { /* code */ };
if (delete myfunc) { //will fail
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
myfunc = null;
if (delete myfunc) { //will still fail
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
var myfunc = null;
if (delete myfunc) { //will still fail
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
但是,如果將函數聲明分配給變量,則可以刪除其標識符。 當您需要創建全局函數而僅臨時使用它時,此功能特別有用,以便可以在不再需要它時將其刪除,或避免可能的標識符與第三方腳本沖突。
var myfunc = function() { /* code */ };
if (delete myfunc) { //will succeed
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
//or...
var myfunc = function myrealfunc() { /* code */ };
if (delete myfunc) { //will succeed
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
有一些差異,大多數是實用的。 當您“變”一個函數時,通常的假設是某種“局部”范圍的函數(以嵌套函數為例)。 當您執行function myFunction() {}
,通常假定該函數是全局范圍的(盡管您也可以將其包裝在匿名函數中)。
對於javascript“類”,如果要創建本地范圍內的函數,則必須使用“ var”進行聲明。
var myClass = function() {
var test = function() {
//This function has local scope
}
};
除了上述注釋之外,這是一個簡單的示例。
var myVariable = resultFunction();
function resultFunction() {
return 1;
}
上面的代碼將起作用。 但是您不能執行以下操作
var myVariable = resultFunction();
var resultFunction = function() {
return 1;
};
但是你可以做
var resultFunction = function() {
return 1;
};
var myVariable = resultFunction();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.