简单示例中回调的使用价值

时间:2016-08-27 22:51:41

标签: javascript function callback

以下示例演示了回调:

示例1: - 使用回调

<script>
// The callback method
function meaningOfLife() {
    console.log("The meaning of life is: 42");
}

// A method which accepts a callback method as an argument
function printANumber(number, callback) {
    console.log("The number you provided is: " + number);
    callback();
}

// Driver method
printANumber(6, meaningOfLife);
</script> 

结果:

The number you provided is: 6
The meaning of life is: 42

示例2: - 正常函数调用

<script>
// A simple function
function meaningOfLife() {
    console.log("The meaning of life is: 42");
}

// Another simple function
function printANumber(number) {
    console.log("The number you provided is: " + number);
    meaningOfLife();
}

// Call to second function
printANumber(6);
</script> 

结果:

The number you provided is: 6
The meaning of life is: 42
  

现在,当我只通过正常的函数调用得到我的结果时,那么Callback的用例是什么?为什么这么大惊小怪?即使从另一个函数内部对方法进行简单调用,我也可以完成任务(Always)。为什么在世界上那么回调的大惊小怪呢?在这个例子中做了哪些特别的工作?

2 个答案:

答案 0 :(得分:3)

  

为什么在世界上那时会有大惊小怪的回调呢?

因为那时调用者决定接下来应该调用什么。

答案 1 :(得分:2)

例如,您需要在10ms延迟后计算值,然后返回它,但您不希望主线程等待10ms。 然后你可以做这样的事情:

&#13;
&#13;
function doSomeStuff(callback) {
   var i = 12;
   callback(i);
}

setTimeout(function() {
  doSomeStuff(function(i) {
     console.log(i);
  });  
}, 10);

// Do something else before "doSomeStuff" is called
&#13;
&#13;
&#13;

回调通常用于单线程语言的异步方法调用(例如,通过XMLHTTPRequest加载资源时)

当然,您应该阅读有关js中闭包的一些信息