JavaScript 学习笔记

1、进行比較时。尽量使用“===”。而不是使用“==”,由于“==”操作符会为了比較两个值而进行强制类型转换,会带来性能消耗。


2、为了达到遍历数组的最佳性能。推荐使用经典的 for 循环。
 var list = [1, 2, 3, 4, 5, ...... 100000000];
for(var i = 0, l = list.length; i < l; i++) {
    console.log(list[i]);

上面代码有一个处理,就是通过 l = list.length 来缓存数组的长度。
尽管 length 是数组的一个属性。可是在每次循环中訪问它还是有性能开销。 可能最新的 JavaScript 引擎在这点上做了优化,可是我们没法保证自己的代码是否执行在这些近期的引擎之上。
实际上,不使用缓存数组长度的方式比缓存版本号要慢非常多。


3、使用var array=[] 来声明数组。代码易读性更高。降低可能发生的错误。


4、隐式的全局变量
 // 脚本 A
foo = '42';
// 脚本 B
var foo = '42' 
上面两段脚本效果不同。脚本 A 在全局作用域内定义了变量 foo。而脚本 B 在当前作用域内定义变量 foo。所以声明变量时都要使用var,防止莫名其妙的bug。


5、JavaScript 中每一个函数内都能訪问一个特别变量 arguments。这个变量维护着全部传递到这个函数中的參数列表。注意: 因为 arguments 已经被定义为函数内的一个变量。 因此通过 var keyword定义 arguments 或者将 arguments 声明为一个形式參数, 都将导致原生的 arguments 不会被创建。arguments 变量不是一个数组(Array)。 虽然在语法上它有数组相关的属性 length,但它不从 Array.prototype 继承,实际上它是一个对象。


6、
闭包意味着当前作用域总是可以訪问外部作用域中的变量。 由于 函数 是 JavaScript 中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数。它可以模拟私有变量
 function Counter(start) {
    var count = start;
    return {
        increment: function() {
            count++;
        },


        get: function() {
            return count;
        }
    }
}


var foo = Counter(4);
foo.increment();
foo.get(); // 5 
这里。Counter 函数返回两个闭包,函数 increment 和函数 get。 这两个函数都维持着 对外部作用域 Counter 的引用。因此总能够訪问此作用域内定义的变量 count.


7、为了不使用全局变量和让程序模块化,在Javascript中有一种方法:使用匿名包装器来创建命名空间
 (function() {
    // 函数创建一个命名空间
    window.foo = function() {
        // 对外公开的函数,创建了闭包
    };

})(); // 马上运行此匿名函数 
匿名函数被觉得是 表达式。因此为了可调用性,它们首先会被运行。


 ( // 小括号内的函数首先被运行
function() {}
) // 而且返回函数对象
() // 调用上面的运行结果。也就是函数对象 


有一些其它的调用函数表达式的方法,比方以下的两种方式语法不同。可是效果一模一样。


 // 另外两种方式
+function(){}();
(function(){}()); 


8、绝对不要省略分号,同一时候也提倡将花括号和对应的表达式放在一行, 对于仅仅有一行代码的 if 或者 else 表达式,也不应该省略花括号。

这些良好的编程习惯不仅能够提到代码的一致性,并且能够防止解析器改变代码行为的错误处理。假设代码在须要分号的地方没有写分号,解析器会自己主动插入分号,有可能会改变代码。


9、call是function的内置方法,使用方法:obj1.method1.call(obj2,argument1,argument2) 
如上,call的作用就是把obj1的方法放到obj2上使用。后面的argument1..这些做为參数传入。apply的作用和call是同样的,可是apply參数要以数组的形式传递,所以当參数明白时可用call, 当參数不明白时可用apply给合arguments 。如

print.call(window, "背" , "光" , "脚", "本"); 

print.apply(window, arguments); 

posted @ 2016-04-22 15:08  mengfanrong  阅读(143)  评论(0编辑  收藏  举报