库和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倾向于将错误表示为回调函数的特定参数,或使用一个附加的错误处理回调函数;

javascript优化--04高质量编码的更多相关文章

  1. javascript优化--01高质量编码

    javascript的浮点数: Javascript的数字都是双精度浮点数: 64位编码数字: 能表达53位精度的整数: 进行位运算时会隐式地转化为32位整数(0,1序列)后计算: 浮点数运算可能会有 ...

  2. javascript优化--02高质量编码

    方法调用: 通常某个对象调用方法查找该方法并将该对象作为该方法的接受者(this): 使用call自定义接受者 可以调用在给定对象中不存在的方法: 定义高阶函数,允许使用者给回调函数指定接受者: 使用 ...

  3. javascript优化--03高质量编码

    使用Object的直接量实例构造轻量级的字典: 使用for/in循环,使用对象字面量来构建,并确保不增加Object.prototype属性来导致for/in循环:(考虑到兼容性,如Array.pro ...

  4. (第一章)改善JavaScript,编写高质量代码。

    根据<编写高质量代码改善JavaScript程序的188个建议>这本书,来记录我目前所了解的建议方式. 建议1:警惕Unicode乱码 根据ECMA标准规定JavaScript语言可以使用 ...

  5. (第二章)改善JavaScript,编写高质量代码。

    建议34:字符串是非值操作 var a = "javascript"; var b = a; b = b.toUpperCase(); alert(a); //javascript ...

  6. 编写高质量JavaScript代码的68个有效方法

    简介: <Effective JavaScript:编写高质量JavaScript代码的68个有效方法>共分为7章,分别涵盖JavaScript的不同主题.第1章主要讲述最基本的主题,如版 ...

  7. 《Offer一箩筐》一份高质量「简历」撰写指南,望打扰!!

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Hi~ 这里是 ...

  8. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...

  9. 高质量JavaScript代码书写基本要点

    翻译-高质量JavaScript代码书写基本要点 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/ ...

随机推荐

  1. 遇到个小问题,Java泛型真的是鸡肋吗?

    今天遇到一个小问题,让我感觉Java的泛型(因为背负了历史的包袱导致的)有点鸡肋啊. 我们经常会遇到要一些自定义的key-value字符串,比如: "key1:1k;key2:2;key3: ...

  2. MyISAM 和 InnoDB 讲解

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处 ...

  3. U盘安装Linux安装报错及解决方案

    导读 从网上看到了<Linux就该这么学>后,偏离软件行业多年的我下定决心回归!这篇文章是我这一个小白的亲身经历,希望能被采纳! 开始按照<Linux就该这么学>中所讲在自己的 ...

  4. Linux 守护进程和超级守护进程(xinetd)

    一 .Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的 ...

  5. 关于C语言的printf输出问题

    前端面试的时候老总居然问这个问题,有点震惊…… #include <stdio.h> #include <stdlib.h> void main() { ; printf(&q ...

  6. Python字符串与数字互转,数字格式化

    # -*- coding: gbk -*- import re #将数字格式化为带三位数逗号的字符串 def formatNumber(number): numStr='%d'%number form ...

  7. [转]Spring的IOC原理[通俗解释一下]

    1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...

  8. 【python】Python标准库defaultdict模块

    来源:http://www.ynpxrz.com/n1031711c2023.aspx Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会 ...

  9. Android-- FragmentStatePagerAdapter分页(转载)

    转载地址:http://blog.csdn.net/dreamzml/article/details/9951577 ViewPager ViewPager 如其名所述,是负责翻页的一个 View.准 ...

  10. php 面向对象之继承、多态和静态方法

    <?php //继承:子类可以继承父类的一切 //特点:单继承 //父类 class Ren { public $name; public $sex; public $yuyan; functi ...