zoukankan      html  css  js  c++  java
  • 编写高质量JS代码的68个有效方法(二)

    [20141011]编写高质量JS代码的68个有效方法(二)

    No.6、了解分号插入的局限性

    Tips:

    1. 仅在“}”标记之前、一行的结束和程序的结束处推导分号
    2. 仅在紧接着的标记不能被解析的时候推导分号
    3. 在以(、[、+、-或/字符开头的语句前绝不能省略分号
    4. 当脚本连接的时候,在脚本之间显式的插入分号
    5. 在return、throw、break、continue、++或--的参数之前绝不能换行
    6. 分号不能作为for循环的头部和空语句的分隔符而被推导出
    7. 个人总结:尽量不要省略分号,不要让JS自动推导

    分号仅在}标记之前、一个或多个换行之后和程序输入的结尾被插入,看代码:

    // 能自动推导分号
    function square(x){
        var n = +x
        return n*n
    }
    
    // Error,不能自动推导
    function square(x){var n = +x return n*n}
    

    分号仅在随后的输入标记不能被解析时插入,看代码:

    a=b
    (f());
    此时,代码等价于 ab(f());
    但是:
    a=b
    f()
    则会被解析为a=b f();
    

    在以(、[、+、-或/字符开头的语句前,绝不能省略分号,看代码:

    a=b
    ['a','b','c'].forEach(function(key){
        console.log(key)
    })
    等价于
    a=b['a','b','c'].forEach(function(key){
        console.log(key);
    });
    
    a=1
    /Error/i.test('test')
    等价于
    a=1/Error/i.test('test');
    

    合并脚本时不能省略分号,看代码:

    //file1.js
    (function(){console.log('file1')})()
    
    //file2.js
    (function(){console.log('file2')})()
    
    //合并后 --输出file1,然后报错
    (function(){console.log('file1')})()(function(){console.log('file2')})()
    

    为了防止自己写的库在合并时内其他代码干扰,所以一般写法为如下代码:

    ;(function(){ 
        /*Code*/ 
    })();
    

    在return、throw、break、continue、++或--的参数之前绝不能换行,看代码:

    a
    ++
    b
    等价于:
    a;++b;
    

    for循环中不要省略分号

    //Parse Error
    var total=0
    for(var i=0,total=1
        i<n
        i++){
        total*=i
    }
    

    综上,再次强调,不加分号看起来代码轻量,但稍不注意就会引起很多bug,所以,建议都加上分号,不要让JS环境自行推导

    No.7、视字符串为16位的代码单元序列

    待定...
    

    No.8、尽量少用全局对象

    Tips:

    1. 避免申明全局变量
    2. 尽量申明局部变量
    3. 避免对全局对象添加属性
    4. 使用全局对象来做平台特性检测

    定义全局变量会污染共享的公命名空间,并可能导致意外的命名冲突。全局变量不利于模块化,因为它会导致程序中独立组件间的不必要耦合。

    No.9、始终声明局部变量

    Tips:

    1. 始终使用var声明新的局部变量
    2. 考虑使用lint工具来帮助检查未绑定的变量

    如果存在比全局变量更麻烦的事情,那就是意外的全局变量。由于不适用var申明的变量,统统为全局变量,所以一定要使用var来定义变量,防止变量污染。

    function test(){
        test='test';
    }
    test();
    window.test;// 'test'
    

    No.10、避免使用with

    Tips:

    1. 避免使用with语句
    2. 使用简短的变量名代替重复访问的对象
    3. 显式地绑定局部变量到对象属性上,而不要使用with语句隐式地绑定他们

    待定...
    
  • 相关阅读:
    INSERT INTO ON DUPLICATE KEY UPDATE
    page to frame
    指定人提交
    在结构体嵌入接口
    排序 /src/sort/zfuncversion.go:136
    Modification should be made to copies of the returned MD.
    setTimeout 定时器的编号 实际延时比设定值更久的原因:最小延迟时间
    IOPS(Input/Output Operations Per Second)是一个用于计算机存储设备(如硬盘(HDD)、固态硬盘(SSD)或存储区域网络(SAN))性能测试的量测方式,可以视为是每秒的读写次数。和其他性能测试一样,存储设备制造商提出的IOPS不保证就是实际应用下的性能。
    Working Around Memory Leaks in Your Django Application
    celery 内存泄露
  • 原文地址:https://www.cnblogs.com/humin/p/4065521.html
Copyright © 2011-2022 走看看