库和API的设计:

  • 在参数设计中保持好的习惯:如顺序,width,height;top,right,bottom,left;如命名;
  • 将undefined看作没有值而不要表示非特定的值;
  • 在允许0,空字符串等为有效参数的地方,不要通过真值测试(||)来实现参数默认值;
    使用//var x === undefined ? 0 : x;  
  • 接受多参数对象的时候可以选用选项对象;
  • 在处理多个预设值的时候可以用extend
    function extend(target, source) {
    if(source) {
    for(var key in source) {
    var val = source[key];
    if(typeof val !== 'undefined') {
    target[key] = val;
    }
    }
    }
    return target;
    }
    function Alert(parent, opts) {
    opts = extend({
    width: 320,
    height: 240
    }, opts);
    opts = extend({
    x: (parent.width/2) - (opts.width),
    y: (parent.height/2) - (opts.height),
    title: 'Alert',
    icon: 'info',
    modal: false
    }, opts);
    extend(this, opts);
    }
    var alert = new Alert({width:1200,height:1000},{title:'child',modal:'true'});
  • 尽可能使用无状态的API;

并发:

  • 不要阻塞I/O事件队列;
  • 使用嵌套或命名的回调函数顺序地执行多个异步操作:
    db.lookupAsync('url', function(url) {
    downloadAsync(url, function(text) {
    console.log('contents of ' + url + ': ' + text);
    })
    })
    --------------优化---------------
    db.lookupAsync('url', downloadURL); function downloadURL(url) {
    downloadAsync(url, function(text) {
    showContents(url, text);
    })
    }
    function showContent(url, text) {
    console.log('contents of ' + url + ': ' + text);
    }
    ---------------优化-------------
    db.lookupAsync('url', downloadURL);
    function downloadURL(url) {
    downloadAsync(url, showContents.bind(null, url));
    }
    function showContents(url, text) {
    console.log('contens of ' + url + ': ' + text);
    }

    在过多嵌套的回调函数和尴尬的命名的非嵌套回调函数之间取得平衡;

  • 当心丢失错误:
    • 表现

      • 异步的API不会抛出异常,因为当一个异步的错误发生时,没有一个明显的执行上下文抛出异常;
      • 异步API倾向于将错误表示为回调函数的特定参数,或使用一个附加的错误处理回调函数;

最新文章

  1. Linux 文件访问权限
  2. juqery 实现商城循环倒计时
  3. JAVA Day6
  4. Qt4升级Qt5注意问题
  5. 创建虚拟交换机(New-VMSwitch)
  6. 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
  7. Linux C 程序 两变量值交换(FIVE)
  8. 主线程中有多个handler的情况
  9. windbg 调试技巧
  10. Java打印
  11. Jeff Atwood:软件工程已死?
  12. java游戏开发杂谈 - 游戏编程浅析
  13. 写给自己的小CASE
  14. Android常用逆向工具+单机游戏破解
  15. “AI”项目日记
  16. No MaterialLocalizations found (Flutter)
  17. php上传导入文件 nginx-502错误
  18. 10分钟复习javaweb
  19. JavaScript数字转字符串,字符串转数字
  20. Intellij使用-- 导入Eclipse的代码格式化文件

热门文章

  1. [Effective JavaScript 笔记]第44条:使用null原型以防止原型污染
  2. IOS 页面之间的跳转
  3. CUDA 6.5 && VS2013 && Win7:创建CUDA项目
  4. linux安装setup工具
  5. 【Hibernate】Hibernate系列5之检索策略
  6. 《ASP.NET1200例》C# WINFORM程序的三层架构如何建立的。
  7. swfit 中的类型属性说明
  8. iOS 推荐学习__bridge等ARC知识的好资料
  9. 【USACO】sprime
  10. ionic添加admob广告教程