JavaScript中的清洁回调

时间:2015-11-21 19:03:24

标签: javascript callback

如果我想打破一个方法的参数足迹中的回调实现,我可以做更干净的代码(例如)

foo.bar(a, callback(), b);
function callback() {
  stuff;
}

而不是

foo.bar(a, function() {
  stuff;
}, b);

但是,如果方法将一些内容传递给回调函数,例如three.js的加载程序函数,我该怎么办? (http://threejs.org/docs/#Reference/Loaders/OBJMTLLoader

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

似乎不起作用。

2 个答案:

答案 0 :(得分:0)

知道了。格式应为:

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

答案 1 :(得分:0)

您发布的2个片段实际上是不同的 - 当您将匿名函数作为参数传递时,它不会立即运行,而是在“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