
撰寫高效率的 JavaScript
|
95
的第 2 個物件,而不是第 1 個,這樣自然會減緩其標識符的解析。在前一個範例裡,
count
變數現在需要更長的時間才能夠存取,因為它不在作用域鏈的第 1 個物件裡。一
旦
with
陳述式執行完畢之後,作用域鏈將回復到它先前的狀態。因為這個重大缺點的
關係,建議你少用
with
陳述式。
第二個會擴充作用域鏈的陳述式是
try-catch
區塊的
catch
子句。
catch
子句的行為就
類似
with
陳述式,執行
catch
子句裡的程式碼時,它會增加變數物件到作用域鏈的前
端。該變數物件包含一個由
catch
指定的具名例外物件的記錄,不過,
catch
子句只有
在 try 子句於執行期間出現錯誤時才會被執行,這使得它不會像
with
陳述式的衝擊那麼
大。然而,你應該小心謹慎,不要在
catch
子句中執行太多程式碼,好將效能衝擊減到
最小。
留意作用域鏈的深度是一種僅需些許工作即可改善效能的簡單方式。請避免不必要的作
用域鏈擴充,而意外導致執行速度的減緩。
高效率資料存取
資料在指令稿裡的儲存位置直接影響到指令稿的總執行時間。通常,資料能夠從指令稿
裡的四種地方被存取︰
• 實字值(literal value)
• 變數
• 陣列項目
• 物件特性(property)
讀取資料總會消耗效能,而消耗量取決於資料儲存在這四種位置中的哪一個。
在大多數瀏覽器上,相對於區域變數,從實字值(literal)讀取資料的處理成本幾乎小
到可以忽略;你大可放心地混用及搭配實字與區域變數,無需擔心效能上會有什麼損 ...