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

關于JS管理作用域的問題

 更新時間:2013年04月10日 15:59:14   作者:  
本篇文章中,小編為大家介紹關于JS管理作用域的問題,有需要的朋友可以關注一下
關鍵字:標識符、執(zhí)行上下文、作用域、作用域鏈、變量對象、活動對象理論知識

理解JavaScript如何管理作用域和作用域鏈很重要。因為在作用域鏈中要查找的變量對象的個數(shù)直接影響標識符解析的性能。標識符在作用域鏈中的位置越深,查找和訪問它所需的時間越長;如果作用域管理不當,就會給腳本的執(zhí)行時間帶來負面影響。

    當執(zhí)行JavaScript代碼時,JavaScript引擎會創(chuàng)建一個執(zhí)行上下文(Execution Context)。執(zhí)行上下文(有時被稱為作用域)設定了代碼執(zhí)行時所處的環(huán)境。JavaScript引擎會在頁面加載后創(chuàng)建一個全局的執(zhí)行上下文,然后每執(zhí)行一個函數(shù)時都會創(chuàng)建一個對應的執(zhí)行上下文,最終建立一個執(zhí)行上下文的堆棧,當前起作用的執(zhí)行上下文在堆棧的最頂端。

    每個執(zhí)行上下文都有一個與之關聯(lián)的作用域鏈,用于解析標識符。作用域鏈包含一個或多個變量對象,這些對象定義了執(zhí)行上下文作用域內(nèi)的標識符。全局執(zhí)行上下文的作用域鏈中只有一個變量對象,它定義了JavaScript中所有可用的全局變量和函數(shù)。當函數(shù)被創(chuàng)建(不是執(zhí)行)時,JavaScript引擎會把創(chuàng)建時執(zhí)行上下文的作用域鏈賦給函數(shù)的內(nèi)部屬性[[Scope]]。然后,當函數(shù)被執(zhí)行時,JavaScript引擎會創(chuàng)建一個活動對象(Activetion Object),并在初始化時給this、arguments、命名參數(shù)和該函數(shù)的所有局部變量賦值?;顒訉ο髸霈F(xiàn)在執(zhí)行上下文作用域鏈的頂端,緊接其后的是函數(shù)[[scope]]屬性中的對象。

   在執(zhí)行代碼時,JavaScript引擎通過搜索執(zhí)行上下文的作用域鏈來解析諸如變量和函數(shù)名這樣的標識符。解析標識符的過程從作用域的頂端開始,按照自上而下的順序進行。

驗證理論

function add(num1, num2) {

    return num1 + num2;

}

當這段代碼執(zhí)行開始時,add函數(shù)擁有一個僅包含全局變量對象的[[scope]]屬性。如下圖:

在執(zhí)行add函數(shù)時,JavaScript引擎會創(chuàng)建一個新的執(zhí)行上下文和一個包含this、arguments、num1、num2的活動對象,并把活動對象添加到作用域鏈中。在add()函數(shù)內(nèi)部運行時,JavaScript引擎需要解析函數(shù)里的num1和num2標識符。var total = add(5, 10);

解析過程是從作用域鏈中的第一個對象開始,這個對象就是包含該函數(shù)局部變量的活動對象。如果在該對象中沒有找到標識符,就會繼續(xù)在作用域鏈中下一個對象里查找標識符。一旦找到標識符,查找就結(jié)束。

高效的數(shù)據(jù)存取

局部變量是JavaScript中讀寫最快的標識符。

一個好的經(jīng)驗:任何非局部變量在函數(shù)中的使用超過一次時,都應該將其存儲為局部變量。

對于數(shù)組和對象,始終將那些需要頻繁存取的值存儲到局部變量中。

實際上每次存取HTMLCollection對象屬性,都會對DOM文檔進行動態(tài)查詢。

如果需要對HTMLCollection對象的成員反復存取,高效的方式是將它們復制到數(shù)組里。

相關文章

最新評論

济宁市| 龙里县| 沁源县| 板桥市| 砚山县| 方城县| 托克托县| 南华县| 无棣县| 全椒县| 桃园县| 盘山县| 祥云县| 县级市| 古丈县| 太白县| 革吉县| 印江| 哈密市| 南宁市| 江安县| 泸州市| 志丹县| 宁陵县| 财经| 明溪县| 五常市| 博湖县| 夹江县| 休宁县| 弥渡县| 河西区| 合山市| 图们市| 德令哈市| 平利县| 亳州市| 柳林县| 潮安县| 大宁县| 张家界市|