簡體   English   中英

回調函數與從函數內部調用函數

[英]callback function vs calling a function from inside the function

我試圖理解JS,並且對回調模式感到困惑。

function one(){
    alert("I'm one!")
}

function total(arg, callback){
    setTimeout(function() {alert("I'm "+arg);}, 1000);
    callback();
}

total('all', one);

function one(){
    alert("I'm one!")
}

function total(arg){
    setTimeout(function() {alert("I'm "+arg);}, 1000);
    one();
}

total('all');

one()作為參數傳遞而不是僅從函數內部調用它有什么好處?

如果您知道總是要調用one ,則無需接受它作為輸入參數; 您可以繼續撥打電話。

接受回調的功能使您可以輕松編寫松耦合的代碼。

例如,您正在代碼示例中將回調傳遞給setTimeout setTimeout知道在調用函數之前要等待給定的毫秒數,但是它不知道要調用哪個函數。

傳遞回調函數使您可以動態影響程序的流程。 另外,您可以將total的結果作為參數傳遞給callback ,該參數通常用於啟用異步編程。

function one(){
  alert("I'm one!")
}

function total(arg, callback){
  setTimeout(function() {
    if (callback) {
      callback();
    }
  }, 1000);
}

我懷疑您的示例不是用來說明回調是什么。 這更有意義嗎?

function cb(arg){
    alert("I'm "+arg+"!")
}

function total(arg, callback){
    setTimeout(callback, 1000, arg);
}

total('one', cb);

回調參數允許您定義自定義交互。 它通常與任何異步操作一起使用,以允許對狀態更改做出反應(例如,當操作完成或出錯時)。

其中一個示例可能是AJAX調用(此處為簡化起見,使用jQuery):

var request = $.ajax({
    url: "script.php"
});

// this allows you to specify custom action handling
request.done(one);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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