Title: 編寫高質量Javascript的要點-Review深刻理解Javascript系列(一)
date: 2017-6-9 14:14:20數組
全局變量命名易與第三方的腳本引發衝突,因此儘量少的使用全局變量是很重要的.相關策略有:命名空間模式或是函數當即自動執行,可是要想讓全局變量少最重要的仍是始終使用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)HTMLCollections
指DOM
方法返回的對象.如:
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)