首頁  >  文章  >  web前端  >  總結一些JavaScript避免使用的函數和語句

總結一些JavaScript避免使用的函數和語句

伊谢尔伦
伊谢尔伦原創
2017-07-26 13:26:061293瀏覽

避免使用eval或Function建構子

使用eval或Function建構子的代價是非常昂貴的,每次都需要腳本引擎轉換原始碼到可執行程式碼。
此外,使用eval處理字串必須在執行時解釋。

運行緩慢的程式碼: 

function addMethod(object, property, code) { 
object[property] = new Function(code); 
} 
addMethod(myObj, 'methodName', 'this.localVar=foo');

運行更快的程式碼: 

function addMethod(object, property, func) { 
object[property] = func; 
} 
addMethod(myObj, 'methodName', function () { 'this.localVar=foo'; });


避免使用with
##儘管很方便, with需要附加的查找引用時間,因為它在編譯的時候並不知道作用域的上下沒。

運行緩慢的程式碼: 

with (test.object) { 
foo = 'Value of foo property of object'; 
bar = 'Value of bar property of object'; 
}

執行更快的程式碼:


var myObj = test.object; 
myObj.foo = 'Value of foo property of object'; 
myObj.bar = 'Value of bar property of object';


不要在性能要求關鍵的函數中使用try-catch-finally 

#try-catch-finally在運行時每次都會在當前作用域創建一個新的變量,用於分配語句執行的異常。

異常處理應該在腳本的高層完成,在異常不是很頻繁發生的地方,例如一個循環體的外面。
如果可能,盡量完全避免使用try-catch-finally。

運行緩慢的程式碼: 

var object = ['foo', 'bar'], i; 
for (i = 0; i < object.length; i++) { 
try { 
// do something that throws an exception 
} catch (e) { 
// handle exception 
} 
}

運行更快的程式碼: 

var object = [&#39;foo&#39;, &#39;bar&#39;], i; 
try { 
for (i = 0; i < object.length; i++) { 
// do something 
} 
} catch (e) { 
// handle exception 
}


避免使用全域變數
如果你在一個函數或其它作用域中使用全域變量,腳本引擎需要遍歷整個作用域去查找他們。
全域作用域中的變數在腳本的生命週期裡都存在,然後局部範圍的會在局部範圍失去的時候被銷毀。

運行緩慢的程式碼: 

var i, 
str = &#39;&#39;; 
function globalScope() { 
for (i=0; i < 100; i++) { 
str += i; // here we reference i and str in global scope which is slow 
} 
} 
globalScope();

運行更快的程式碼: 

function localScope() { 
var i, 
str = &#39;&#39;; 
for (i=0; i < 100; i++) { 
str += i; // i and str in local scope which is faster 
} 
} 
localScope();


避免在效能要求關鍵的函數中使用for-in
for-in循環需要腳本引擎建立所有可枚舉屬性的列表,並檢查是否與先前的重複。
如果你的for迴圈作用域中的程式碼沒有修改數組,可以預先計算好數組的長度用於在for迴圈中迭代數組。 

執行緩慢的程式碼: 

var sum = 0; 
for (var i in arr) { 
sum += arr[i]; 
}

執行更快的程式碼: 

var sum = 0; 
for (var i = 0, len = arr.length; i < len; i++) { 
sum += arr[i]; 
}

以上是總結一些JavaScript避免使用的函數和語句的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn