JavaScript中的清理回调

JavaScript中的清理回调,javascript,callback,Javascript,Callback,如果我想将回调实现从方法的参数封装中分离出来以获得更干净的代码,我可以这样做(例如) 而不是 foo.bar(a, function() { stuff; }, b); 但是,如果该方法将某些内容传递到回调中,比如三个.js的加载函数,我该怎么办?() 似乎不起作用。明白了。格式应为: foo.bar(callback); function callback(object) { object.stuff(); } 您发布的两个代码片段实际上是不同的-当您将匿名函数作为参数传递时,它不

如果我想将回调实现从方法的参数封装中分离出来以获得更干净的代码,我可以这样做(例如)

而不是

foo.bar(a, function() {
  stuff;
}, b);
但是,如果该方法将某些内容传递到回调中,比如三个.js的加载函数,我该怎么办?()


似乎不起作用。

明白了。格式应为:

foo.bar(callback);
function callback(object) {
  object.stuff();
}

您发布的两个代码片段实际上是不同的-当您将匿名函数作为参数传递时,它不会立即运行,而是在“foo.bar”函数本身中运行。但是,当您将其作为“callback()”传递时,该函数将立即运行(在某些情况下非常有用,例如:如果该函数返回另一个函数)。所以,不要用“()”来传递它

例如:

function a(){
   alert(1);
}
function b(callback){
   callback(); //run the callback function.
}

b(a);
如果您想查看第二个选项的示例:

function a(){
   return function() {
      alert(1);
   };
}

a()(); //Alert
b(a()); //Alert
b(a) //nothing happens

但是,.你知道为什么吗?但是不知道。
foo.bar
不知道应该用
object
调用回调,也不知道用什么
object
调用回调。尽管如此。Foo专门传入了它创建的变量,所以无论如何我都不能指定。这目前正在我的实现中运行。@Joel,如果我不得不猜测我会说,通过包含()我实际上在传递该函数的结果(调用它),而在没有括号的情况下,我在传递函数本身?好吧@GameKyuubi X),我相信没有一个正确的答案可以帮助我们,但是知识使我们成长。这些函数之间有什么区别吗?没有。这只是函数的返回和回调。为什么要传递
callback()
而不是
callback
foo.bar(function(){callback(object);}
function a(){
   alert(1);
}
function b(callback){
   callback(); //run the callback function.
}

b(a);
function a(){
   return function() {
      alert(1);
   };
}

a()(); //Alert
b(a()); //Alert
b(a) //nothing happens