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

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请求改成同步试试。

登录 或者 注册
相关帖子
格式建议
  • 本站使用 Markdown 格式,想了解这一格式请阅读:《用Markdown语法写文章》
  • 内容框下有实时预览框,请预览后发帖。
  • 文字前面请不要空4个英文空格
  • 每段文字之间请回两次车
  • 贴代码前点击左侧工具栏的“贴代码”按钮(
    ),然后在出现的“enter code here”处贴入你的代码。
  • 回复特定回复的时候,请点击该回复右侧的回复链接,系统将自动创建楼号和@通知。
  • @他人的时候注意,id后面请加一个空格。
  • 使用左侧工具栏“贴链接”按钮(
    )创建的优酷、土豆、youtube视频链接,将自动生成播放区域,不需要使用其他包含方式。
  • 如果要创作长篇格式复杂的帖子,本站建议Mac用户使用Mou软件,离线写好,贴入即可。