最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript 用局部變量來代替全局變量第2/2頁

 更新時(shí)間:2009年05月29日 20:24:56   作者:  
在JavaScript中,我們應(yīng)該盡可能的用局部變量來代替全局變量,這句話所有人都知道,可是這句話是誰先說的?

上面的結(jié)果是通過對變量執(zhí)行寫操作而得出的,其實(shí)我很好奇,讀取變量時(shí)的情況會(huì)不會(huì)有什么不同,于是接著做了下面的測試。結(jié)果發(fā)現(xiàn),讀的速度要比寫的速度快一些,但是性能變化的趨勢是一致的。

       和上個(gè)測試一樣,Internet Explorer和Firefox還是最慢的,Opera表現(xiàn)了非常搶眼的性能,而同樣的,Chrome和最新版本的Webkit午夜版顯示了和作用域深度無關(guān)的性能趨勢,同樣需要注意的是,F(xiàn)irefox 3.1 Beta 2的變量訪問時(shí)間還是會(huì)伴隨著深度出現(xiàn)一個(gè)奇怪的跳躍。

       在測試的過程中,我發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,就是Chrome在訪問全局變量的時(shí)候會(huì)有額外的性能損失。訪問全局變量的時(shí)間和作用域?qū)訑?shù)沒有關(guān)系,但是會(huì)比訪問同樣層數(shù)的局部變量的時(shí)間多出50%。

       這兩個(gè)測試可以給我們帶來什么啟示呢?首先是驗(yàn)證了那個(gè)古老的觀點(diǎn),就是要盡可能的使用局部變量。在所有的瀏覽器下,訪問局部變量都比訪問跨作用域的變量要快,當(dāng)然也包括全局變量。下面這幾點(diǎn)應(yīng)該是通過這個(gè)測試得出的經(jīng)驗(yàn)吧:

1、仔細(xì)檢查函數(shù)中所有使用的變量,如果有一個(gè)變量不是當(dāng)前作用域定義的,而且使用了不止一次,那么我們就應(yīng)該把這個(gè)變量保存在局部變量中,而使用這個(gè)局部變量來進(jìn)行讀寫操作。這樣可以幫助我們將作用域外的變量的搜索深度減少到1.這對全局變量尤為重要,因?yàn)槿肿兞靠偸潜环诺阶饔糜蜴湹淖詈笪恢脕硭阉鳌?

2、避免使用with語句。因?yàn)樗鼤?huì)修改執(zhí)行上下文(Execution Context)的作用域鏈,在最前面添加一個(gè)對象(Variable Object)。這就意味著在執(zhí)行with的過程中,實(shí)際上的局部變量都被移到作用域鏈上的第二個(gè)位置,這會(huì)帶來性能上的損失。

3、如果你確定一段代碼肯定會(huì)拋出異常,那么就要避免使用try-catch,因?yàn)閏atch分支在作用域鏈上的處理方法和with是一樣的。但try分支的代碼是沒有性能損失的,所以還是建議用try-catch來捕獲那些不可預(yù)知的錯(cuò)誤。

       如果你想圍繞這個(gè)話題展開更多的討論,我在上個(gè)月的 Mountain View JavaScript Meetup 中曾經(jīng)發(fā)表了一個(gè)小演講??梢栽赟lideShare上下載 幻燈片,或者觀看聚會(huì)的 完整視頻,我的演講大概從11分鐘左右時(shí)開始。

譯者筆記
大家如果在閱讀本文的過程中,有什么疑惑,建議延伸閱讀以下兩篇文章:
1、Richie寫的《JavaScript對象模型-執(zhí)行模型
2、《ECMA-262第三版》,主要看看第十章,就是執(zhí)行上下文(Execution Context)那張,本文提到的名詞在那里都有詳細(xì)的解釋。

       在最后的時(shí)候,Nicholas提到一個(gè)Mountain View JavaScript Meetup,Meetup那個(gè)網(wǎng)站其實(shí)就是一個(gè)各種現(xiàn)實(shí)世界活動(dòng)的組織網(wǎng)站,需要翻墻才能訪問,住在California真幸福,有那么多的好活動(dòng)可以參加,呵呵。

相關(guān)文章

最新評(píng)論

安岳县| 莆田市| 万源市| 喜德县| 新安县| 东源县| 罗平县| 山西省| 宜宾县| 陆丰市| 玉林市| 富蕴县| 饶河县| 宁都县| 石城县| 宁国市| 九寨沟县| 皋兰县| 墨江| 双辽市| 永吉县| 丰原市| 长寿区| 泗水县| 寻甸| 八宿县| 万年县| 霍邱县| 石景山区| 祥云县| 伊春市| 安远县| 邛崃市| 阿拉尔市| 靖安县| 岳普湖县| 昆山市| 云龙县| 稷山县| 宝山区| 黑河市|