用回调还是返回值呢, 哪个更好?

Kyk97 发布于 2014年04月08日 | 更新于 2014年04月10日
无人欣赏。

比如
invokeCallback(param1, function (e) {
//code...
});
function invokeCallback(params1, callback) {
callback.call(null, params2);
}
或者
var result = invokeCallback(params1);
//code.
function invokeCallBack(params1) {
return params2;
}
哪个看上去比较好呢?求教,谢谢。

共9条回复
tinyfool 回复于 2014年04月09日

你自己的感觉呢?

surrender 回复于 2014年04月09日

这是JS? 不懂JS的觉得第二种更加简洁易懂。

JasonHeylon 回复于 2014年04月09日

个人一般是异步操作或者js插件用回调,同步操作用返回值。

rothcold 回复于 2014年04月09日

JS的话怎么着都是回调好

因为JS是纯单线程的,所以如果你用第二种,中间过程中会导致整个程序阻塞(前端程序特别不能忍,因为会导致整个页面卡住,就算0.x秒对用户来说也会感觉到)

但是回调也有更好的写法,比如使用订阅的方法来处理多个回调的返回,可以避免面条回调。

var consumer = {}
consumer.consume = function(key, value){
  this.params[key] = value
  if(this.paramsReady()){
    // code...
  }
}

function invoke1(params) { 
  // code...
  consumer.consumer("param1", param1)
} 

function invoke2(params) { 
  // code...
  consumer.consumer("param2", param2)
} 
lionlee 回复于 2014年04月09日

4楼 @rothcold ,是这样的

Kyk97 回复于 2014年04月09日

我的看法,异步有意义的用回调,比如另一个线程实现的UI事件,或者轮询I/O事件,其它的代码可读性优先,不注意的话写匿名函数容易造成代码结构散乱,滋生多层嵌套,缩进过度。

flyflybird 回复于 2014年04月10日

异步要用回调。同步的话都可以,根据你的代码决定。

flyflybird 回复于 2014年04月10日

4楼 @rothcold 既然是单线程,return和callback都是一样的效果

rothcold 回复于 2014年04月10日

8楼 @flyflybird 完全不一样,你可以把ajax请求改成同步试试。

登录 或者 注册