簡體   English   中英

作為參數傳遞的函數是否總是回調? JavaScript的

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM