为什么javascript回调作为参数传递?

Sus*_*ant 1 javascript asynchronous callback

我试图第一次理解回调.在我看到的所有示例中,回调总是作为参数传递.这是一个常见的例子:

let result = 0;

function add(num1, num2, callback) {
    setTimeout(() => {
        result = num1 + num2;
        callback();
    }, 2000);
}

function logResult() {
    console.log(result);
}

add(4, 5, logResult); // here's the callback passed as argument
Run Code Online (Sandbox Code Playgroud)

使用以下代码可以获得相同的结果.并且它不需要将回调作为参数传递.

let result = 0;

function add(num1, num2) {
    setTimeout(() => {
        result = num1 + num2;
        logResult();
    }, 2000);
}

function logResult() {
    console.log(result);
}

add(4, 5);
Run Code Online (Sandbox Code Playgroud)

它只是为了可读性和理解代码更好,它们作为参数传递?还是有什么我想念的?请有人赐教我吗?

Jon*_*lms 6

您的示例中根本不需要回调,您可以这样做:

function add(num1, num2) {
  setTimeout(() => { // thats a callback too, just saying ...
    const result = num1 + num2; // don't leak variables, declare them!
    console.log(result);
  }, 2000);
}
Run Code Online (Sandbox Code Playgroud)

然而,编程就是创建可重用的代码,然后可以将其组合成更复杂的程序.因此,您不希望限制add记录结果的用法,而是如果您接受回调,则可以使用它来实现各种任务:

 add(1, 2, (result) => {
   add(result, 5, (result2) => {
    alert(result2);
   });
});
Run Code Online (Sandbox Code Playgroud)