[英]Are functions passed as parameters always callbacks? JavaScript
如果我有下面的代碼,我將兩個函數作為參數傳遞給函數sayHi
,這是回調的示例嗎?
我注意到有兩種方法可以運行這些“參數函數”:如下所示,我們在定義它們的函數中調用它們(作為參數),或者在sayHi函數中調用參數。 這是回調和匿名函數之間的區別嗎?
function sayHi(name, testForTrue) {
if (testForTrue == true) {
console.log(name);
}
}
sayHi(function() {
return 'Zach'
}(), function() {
return true;
}());
我可以得到相同結果的另一種方法如下。 在這種情況下,我要在其他時間評估功能? 兩者之間有什么實際區別嗎?
function sayHi(name, testForTrue) {
if (testForTrue() == true) {
console.log(name());
}
}
sayHi(function() {
return 'Zach'
}, function() {
return true;
});
是的,作為參數傳遞的函數始終是回調,即使目的是同步調用該函數(參見Array.prototype.map
)而不是異步調用(參見window.setTimeout
)。
當然,在第一個代碼塊中,您實際上並沒有傳遞函數。 您有兩個立即調用的函數表達式 ,其中此上下文中的關鍵部分被立即調用 。 函數表達式在代碼中出現的那一刻被調用,並且僅將這些表達式的結果傳遞給sayHi
。
在第一個示例中,您沒有傳遞函數,而是傳遞值; 換一種說法
(function(){ return 3; })()
只是整數3。
它是立即調用函數獲得的值,但這無關緊要。
當您傳遞回調時,將由接收方對其進行調用(或將其傳遞給其他函數),並且代碼將稍后執行,而不是在調用站點執行。
我想這將取決於您的回調函數的實際作用。
在您的示例中,您真正要做的就是返回一個值。 那實際上不是一個“函數”,它每次都返回一個固定值。
如果您的函數實際上正在執行一個過程,或者返回一個變化的結果,那么我個人將其視為回調。 (它的名字確實是不言而喻的)。 您的腳本不應依賴它,而應將其作為函數結果的處理程序。
例如,這樣的事情就是我認為的回調函數:
function doSomething(callback) {
var userInput = prompt("hello, enter a number 1-10"),
hasWon = false;
if (userInput === "3") hasWon = true;
callback(hasWon);
};
有了這個,我們可以這樣稱呼它:
doSomething(function(hasWon){
if (hasWon) alert("Congratz! You guessed my lucky number!")
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.