-1

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

$(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

4 回答 4

2

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

当你打电话callback("bar")func1,你完全错过了回调的意义。您可能正在调用您碰巧用作回调的函数,但回调的重点func1是不应该知道这一点。它只是应该调用作为参数 ( cb) 传入的函数。当我打电话时,func1我应该能够传递一个完全不同的回调函数,并且func1应该只调用该函数而不知道它的名字是什么(它甚至可能没有一个!)。

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

于 2013-07-25T20:58:26.153 回答
1

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

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

于 2013-07-25T20:44:21.003 回答
1

第一。函数调用另一个已作为参数传递的函数。

于 2013-07-25T20:49:37.600 回答
0

似乎大多数 jquery 方法都遵循这种回调形式:

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

例如

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

小提琴

于 2013-07-25T20:52:04.173 回答