欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript 用局部變量來代替全局變量

 更新時(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è)小演講。可以在SlideShare上下載 幻燈片,或者觀看聚會(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)文章

  • javascript代碼編寫需要注意的7個(gè)小細(xì)節(jié)小結(jié)

    javascript代碼編寫需要注意的7個(gè)小細(xì)節(jié)小結(jié)

    每種語言都有它特別的地方,對于JavaScript來說,使用var就可以聲明任意類型的變量,這門腳本語言看起來很簡單,然而想要寫出優(yōu)雅的代碼卻是需要不斷積累經(jīng)驗(yàn)的。本文利列舉了JavaScript初學(xué)者應(yīng)該注意的七個(gè)細(xì)節(jié),與大家分享。
    2011-09-09
  • js 概率計(jì)算(簡單版)

    js 概率計(jì)算(簡單版)

    這篇文章主要介紹了js 概率計(jì)算(簡單版),需要的朋友可以參考下
    2017-09-09
  • ES6 新增的創(chuàng)建數(shù)組的方法(小結(jié))

    ES6 新增的創(chuàng)建數(shù)組的方法(小結(jié))

    這篇文章主要介紹了ES6 新增的創(chuàng)建數(shù)組的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • JavaScript嚴(yán)格模式詳解

    JavaScript嚴(yán)格模式詳解

    本文主要介紹了JavaScript嚴(yán)格模式的相關(guān)知識(shí)。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • COM中獲取JavaScript數(shù)組大小的代碼

    COM中獲取JavaScript數(shù)組大小的代碼

    JavaScript調(diào)用COM傳遞數(shù)組時(shí),在COM接口端,接收到的是VARIANT類型對象,如array,該對象的vt類型VT_DISPATCH,因此其值表示的是一個(gè)IDispatch類型的指針。
    2009-11-11
  • 微信小程序異步處理詳解

    微信小程序異步處理詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序異步處理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • TypeScript聲明合并的實(shí)現(xiàn)

    TypeScript聲明合并的實(shí)現(xiàn)

    本文主要介紹了TypeScript聲明合并的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • JavaScript中的this妙用實(shí)例分析

    JavaScript中的this妙用實(shí)例分析

    這篇文章主要介紹了JavaScript中的this妙用,結(jié)合實(shí)例形式分析了JavaScript中的this基本功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • javascript函數(shù)報(bào)Uncaught?ReferenceError:?XXX?is?not?defined

    javascript函數(shù)報(bào)Uncaught?ReferenceError:?XXX?is?not?define

    本文主要介紹了javascript函數(shù)報(bào)Uncaught?ReferenceError:?XXX?is?not?defined,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • js中實(shí)現(xiàn)字符串和數(shù)組的相互轉(zhuǎn)化詳解

    js中實(shí)現(xiàn)字符串和數(shù)組的相互轉(zhuǎn)化詳解

    這篇文章主要介紹了js中實(shí)現(xiàn)字符串和數(shù)組的相互轉(zhuǎn)化,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評論