有效使用回调函数的示例

时间:2015-10-08 08:13:12

标签: javascript callback

所以我理解回调本质上是传递给另一个函数并在以后执行的函数。

我也知道很多主要的库如jQuery都有效地使用回调,但是我想要一个简单的代码示例,并解释何时最好使用回调函数来解决问题。 到目前为止我看到的所有例子都是setTimeout,但是我想看一个新的例子来拓宽我对如何使用回调函数的想法。

如此亲切,我想看到 1.回调函数的一个例子。 2.为什么在这个例子中它将是一个合适的解决方案/方法 3.可能是使用回调的其他常见原因/场景。

非常感谢你!

3 个答案:

答案 0 :(得分:2)

当你必须处理一个你不知道计算时间的函数(或方法)时,通常会使用回调。

例如,假设您需要从竖井中获取一些水来做某事,但您实际上并不知道此竖井离您家的位置和距离:您要求朋友(异步功能)善意走到竖井并为你取水,这样当他回来时就可以使用它。

同时,在等待水时,你可以做一些其他有用的事情。

一个基本的例子是:

function getWater(callback) {
    // Walk to the shaft
    // Take water
    // Go back home 
    // This function is asynchronous

    callback();
}

function useWater() {
    // Do what you needed to do with water
}

getWater(useWater);
// While waiting to use the water:
doUsefulThings();

答案 1 :(得分:0)

函数是第一类对象,我们可以将函数作为参数传递给另一个函数,然后执行该传入函数,甚至将其返回以便稍后执行。这是在JavaScrip中使用回调函数的本质 JAVA SCRIPT回调

示例:

   function test(data,function(datafromfunc){
           //my function
});

内部服务功能

  function(data,callback)
{
  //your logic
  callback(result)
}

示例2 // JavaScript回调函数

function randomize(min, max, callback) {  
    var random = Math.ceil(Math.random() * (min - max) + max);
    callback(random);
}

randomize(5, 15, function(rndm) {
    alert(rndm);
});

答案 2 :(得分:0)

在JavaScript中,我们可以像处理任何其他Functions一样处理variables

也就是说,传统上我们编写的函数如下:

function sayHello(name){
      console.log("Hello "+name);
}

然后调用它传递必要的参数:

sayHello("JavaScript");  

这几乎就是我们在其他脚本语言中使用函数的方式。

但是,如果我告诉你,在JavaScript中,functionvariable一样好,当我们调用函数时它可以作为参数传递?

例如:

var sayHello = function(name){  // My callback method
  console.log(name);
};

function getNameAndSayHello(callback){
   var name = 'My name is a Sandeep'; // I do some other things here...
   //..........some other code.............
   //..... when i am done with other things, i call the callback method... 
   callback(name);

}

getNameAndSayHello(sayHello);

正如您将看到的,我将sayHello(函数)作为参数传递给另一个函数getNameAndSayHello。简而言之,Functional Programming的本质,虽然不是最纯粹的形式。

这种传递functions的能力就像任何其他variable/value一样,这使我们在以后适合我们时调用callback非常方便。

http://jsfiddle.net/wz9b1s8m/