編寫高質量Javascript的要點-Review深刻理解Javascript系列(一)


Title: 編寫高質量Javascript的要點-Review深刻理解Javascript系列(一)
date: 2017-6-9 14:14:20數組

status: public

知識點!!!

最小全局變量Minimizing Global

全局變量命名易與第三方的腳本引發衝突,因此儘量少的使用全局變量是很重要的.相關策略有:命名空間模式或是函數當即自動執行,可是要想讓全局變量少最重要的仍是始終使用var來聲明變量。瀏覽器

幾種不經意之間聲明的全局變量示例(反例)

//第一種
function sum(x,y){
    result = x+y;//隱式聲明瞭全局變量result
    return result;
}

//第二種
function foo(){
    //這邊是首先聲明瞭全局變量b,賦值0,又將b的引用指向a;
    var a=b=0;
}

隱式全局變量與明肯定義的全局變量的差異

經過var聲明的全局變量,經過delete操做符是沒法刪除的緩存

沒有經過var聲明的隱式全局變量,能夠經過delete刪除dom

注:
在技術上,隱式全局變量並非真正的全局變量,但它們是全局對象的屬性。屬性是能夠經過delete操做符刪除的,而變量是不能的函數

全局對象的訪問

在瀏覽器中,全局對象能夠經過window的屬性來訪問.oop

在任何層級的做用域中訪問全局對象:優化

var global = (function(){
    return  this;
}());
//這個方法能夠隨時訪問全局對象,由於其被當作函數調用了,this老是指向全局對象.

聲明變量的小技巧:單var形式

舉個栗子吧:this

function foo(){
    var a=1,
        b=2,
        c=a+b,
        obj={},
        $dom = document.getElementById('demo'),
        k,m;
    //....
}

預解析:var的散佈問題(Hosting:A Problem with Scattered vars)

對於JavaScript,只要你的變量是在同一個做用域中(同一函數),它都被當作是聲明的,即便是它在var聲明前使用的時候。code

栗子:orm

a = 'hehehe';
function foo(){
    console.log(a);//undefined
    var a = 'abcd';//a在此被看成了局部變量,雖然是在以後聲明的
    console.log(a);//abcd
}

foo();

Javascript代碼執行分爲兩個階段:

1.變量,函數聲明以及正常格式的參數建立,這是一個解析和進入上下文的階段
2.代碼執行,函數表達式和不合格的標識符被建立.

for循環的優化(For Loops)

HTMLCollectionsDOM方法返回的對象.如:

document.getElementsByName();
document.getElementsByClassName();
document.getElementsByTagName();
document.images;
document.links;
document.forms;
document.forms[0].elements;//頁面第一個表單的全部域

HTML集合,在每次訪問其長度時會實時的查詢DOM,DOM操做相對來講比較昂貴.

//優化的for循環寫法,緩存數組的長度.
for(var i=0,len=array.length;i<len;i++){
    //...
}

還有進一步的微操做:

  • 少了一個變量

  • 向下數到0,一般更快,由於和0作比較要比和數組長度或是其餘不是0的東西做比較更有效率

var i,myArray=[];
for(i=myArray.length;i--){

}

var myarray = [],
    i = myarray.length;
while (i–-) {
   // 使用myarray[i]作點什麼
}

for-in循環(for in loops)

相關文章
相關標籤/搜索