这是JavaScript / jQuery回调的正确方法吗?

时间:2013-07-25 20:41:32

标签: javascript jquery callback jquery-callback

这是一个简单的问题。这是我的代码:

$(document).ready( function () {

    func1( "foo", callback);

    function callback(param){
        alert(param+" is my name");
    }

    function func1(name, cb) {
        cb(name);        // alerts "foo is my name"
        callback("bar"); // alerts "bar is my name"
    }
});

我想知道:

  • func1内的哪一个函数调用是正确的callback以及为什么?
  • 或者他们都是正确的吗?
  • callback("bar");是不是正常的函数调用?

4 个答案:

答案 0 :(得分:2)

回调旨在让调用者指定函数在该函数执行的某个定义点应该执行的操作。被调用的函数不应该提前知道该回调函数的名称。因此,它们通常会作为参数传递给函数,并且应该调用回调的函数应该只调用该参数。

当您在callback("bar")中致电func1时,您完全错过了回调点。您可能正在调用恰好用作回调的函数,但回调点是func1不应该知道这一点。它只是应该调用作为参数传递的函数(cb)。当我正在调用func1时,我应该能够传递一个完全不同的回调函数,func1应该只调用该函数而不知道它的名字是什么(它甚至可能没有!)。

“正确”的方式是cb(name)

答案 1 :(得分:1)

callback("bar");直接调用回调函数,其中cb(name);调用传递给func1的引用,

cb(name);似乎是正确的方法。

答案 2 :(得分:1)

第一个。函数调用另一个已作为参数填充的函数。

答案 3 :(得分:0)

似乎大多数jquery方法遵循此形式进行回调:

 $(SUBJECT).method(function() {
     //do stuff
 }, /*callback here*/ function(){
    //do stuff
 });

就像例如

$(foo).click(function() {
      $(bar).fadeIn(300, function(){
         //call back here
      });
 });

fiddle