答:http://www.jb51.net/article/79474.htm工具
|
這段代碼將with語句做用到了obj對象上,而後直接使用a訪問obj的a屬性,按照前面說到的觀點,訪問a屬性時,是一次性就能夠在obj上找到該屬性的,可是爲何代碼性能依舊下降了呢。 真正的緣由是:使用了with關鍵字後,JS引擎沒法對這段代碼進行優化。 JS引擎在代碼執行以前有一個編譯階段,在不使用with關鍵字的時候,js引擎知道a是obj上的一個屬性,它就能夠靜態分析代碼來加強標識符的解析,從而優化了代碼,所以代碼執行的效率就提升了。使用了with關鍵字後,js引擎沒法分辨出a變量是局部變量仍是obj的一個屬性,所以,js引擎在遇到with關鍵字後,它就會對這段代碼放棄優化,因此執行效率就下降了。 使用with關鍵字對性能的影響還有一點就是js壓縮工具,它沒法對這段代碼進行壓縮,這也是影響性能的一個因素。