中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      javascript閉包的介紹理解和講解實例

      時間:2024-07-12 21:08:58 JavaScript 我要投稿
      • 相關推薦

      javascript閉包的介紹理解和講解實例

        順便提示一下:

        詞法作用域:變量的作用域是在定義時決定而不是執行時決定,也就是說詞法作用域取決于源碼,通過靜態分析就能確定,因此詞法作用域也叫做靜態作用域。 with和eval除外,所以只能說JS的作用域機制非常接近詞法作用域(Lexical scope)。

        下面是一個簡單的使用全局變量的閉包實例:

        復制代碼 代碼如下:

        var sWord="Hello,Welcome to web前端開發工程師的博客,請多多指教。"

        function disWord(){

        alert(sWord);

        }

        disWord();

        解析:腳本載入到內存的時候,disWord并沒有計算sWord的值,而是函數disWord調用的時候執行了sWord的計算。

        下面是函數中定義另一個函數的閉包實例:

        復制代碼 代碼如下:

        var iNum=10;

        function add(num1,num2){

        function doAdd(){return num1+num2+iNum;}

        return doAdd();

        }

        解析:內部函數doAdd是個閉包,它將獲取傳入參數num1,num2和全局變量iNum的值,doAdd不接受參數,add最后一步調用doAdd,請兩個參數和全局變量求和返回,可以看得出doAdd使用的值是在執行環境中獲得的。

        下面是在網上找的幾個例子,理解詞法作用域和閉包

        復制代碼 代碼如下:

        、案例一

        /*全局(window)域下的一段代碼*/

        function a(i) {

        var i;

        alert(i);

        };

        a(10);

        疑問:上面的代碼會輸出什么呢?

        答案:10。

        具體執行過程

        a 函數有一個形參 i,調用 a 函數時傳入實參 10,形參 i=10

        接著定義一個同名的局部變量 i,未賦值

        alert 輸出 10

        思考:局部變量 i 和形參 i 是同一個存儲空間嗎?

        、案例二

        復制代碼 代碼如下:

        1 /*全局(window)域下的一段代碼*/

        2 function a(i) {

        3 alert(i);

        4 alert(arguments[0]); //arguments[0]應該就是形參 i

        5 var i = 2;

        6 alert(i);

        7 alert(arguments[0]);

        8 };

        9 a(10);

        疑問:上面的代碼又會輸出什么呢?

        答案:10,10,2,2

        具體執行過程

        函數有一個形參i,調用 a 函數時傳入實參 10,形參 i=10

        第一個 alert 把形參 i 的值 10 輸出

        第二個 alert 把 arguments[0] 輸出,應該也是 i

        接著定義個局部變量 i 并賦值為2,這時候局部變量 i=2

        第三個 alert 就把局部變量 i 的值 2 輸出

        第四個alert再次把 argumentsa[0] 輸出

        思考:這里能說明局部變量 i 和形參 i 的值相同嗎?

        、案例三

        復制代碼 代碼如下:

        /*全局(window)域下的一段代碼*/

        function a(i) {

        var i = i;

        alert(i);

        };

        a(10)

        疑問:上面的代碼又又會輸出什么呢?

        答案:10

        具體執行過程

        第一句聲明一個與形參 i 同名的局部變量 i,根據結果我們知道,后一個 i 是指向了

        形參 i,所以這里就等于把形參 i 的值 10 賦了局部變量 i

        第二個 alert 當然就輸出 10

        思考:結合案列二,這里基本能說明局部變量 i 和形參 i 指向了同一個存儲地址!

        、案例四

        復制代碼 代碼如下:

        /*全局(window)域下的一段代碼*/

        var i=10;

        function a() {

        alert(i);

        var i = 2;

        alert(i);

        };

        a();

        疑問:上面的代碼又會輸出什么呢?

        答案:undefined, 2

        具體執行過程

        第一個alert輸出undefined

        第二個alert輸出 2

        思考:到底怎么回事兒?

        看到上面的幾個例子,你可能會想到底是怎么執行的呢?執行的細節又是怎么樣的呢? JS 引擎的工作方式是怎樣的呢?

        解析過程

        、執行順序

        編譯型語言,編譯步驟分為:詞法分析、語法分析、語義檢查、代碼優化和字節生成。

        解釋型語言,通過詞法分析和語法分析得到語法分析樹后,就可以開始解釋執行了。這里是一個簡單原始的關于解析過程的原理,僅作為參考,詳細的解析過程(各種JS引擎還有不同)還需要更深一步的研究

        javascript的執行過程,如果一個文檔流中包含多個script代碼段(用script標簽分隔的js代碼或引入的js文件),它們的運行順序是:

        步驟1. 讀入第一個代碼段(js執行引擎并非一行一行地執行程序,而是一段一段地分析執行的)

        步驟2. 做詞法分析和語法分析,有錯則報語法錯誤(比如括號不匹配等),并跳轉到步驟5

        步驟3. 對【var】變量和【function】定義做“預解析“(永遠不會報錯的,因為只解析正確的聲明)

        步驟4. 執行代碼段,有錯則報錯(比如變量未定義)

        步驟5. 如果還有下一個代碼段,則讀入下一個代碼段,重復步驟2

        步驟6. 結束

        、特殊說明

        全局域(window)域下所有JS代碼可以被看成是一個“匿名方法“,它會被自動執行,而此“匿名方法“內的其它方法則是在被顯示調用的時候才被執行

        、關鍵步驟

        上面的過程,我們主要是分成兩個階段

        解析:就是通過語法分析和預解析構造合法的語法分析樹。

        執行:執行具體的某個function,JS引擎在執行每個函數實例時,都會創建一個執行環境(ExecutionContext)和活動對象(activeObject)(它們屬于宿主對象,與函數實例的生命周期保持一致)

        在這里有更詳細的實例分析資料:/article/24547.htm

      【javascript閉包的介紹理解和講解實例】相關文章:

      javascript閉包的定義及應用實例分析08-25

      javascript的閉包概念怎么理解06-15

      Javascript 閉包引起IE內存泄露分析07-05

      JavaScript的課堂講解09-03

      對javascript的理解08-08

      JavaScript fontcolor方法入門實例07-07

      JavaScript中push(),join() 函數實例詳解09-05

      理解JavaScript原型鏈教程09-02

      有關深入理解JavaScript中的并行處理的介紹10-14

      實例講解托福閱讀推斷題技巧06-20

      主站蜘蛛池模板: 久久久久久无中无码| 绥芬河市| 青春草在线观看播放网站 | 金华市| 999久久久免费精品国产牛牛| 久久久久久久国产精品电影| 玩弄放荡人妻一区二区三区| 永和县| 河津市| 97国产精品麻豆性色| 舒城县| 正定县| 国产精品伦人视频免费看| 嘉禾县| 中国少妇精品偷拍视频| 久久久久久人妻一区二区无码Av| 精品欧洲AV无码一区二区免费| 亚洲中字幕永久在线观看| 极品av在线播放| 中文字幕亚洲第一页在线| 国产盗摄老熟女视频一区二区三区| 国产精品国产三级国产AvkTV| 亚洲国产字幕| 乌兰察布市| av无码电影一区二区三区| 亚洲免费人成网站在线观看| 建湖县| 亚洲人成网站在线播放小说| 国产精品无码不卡在线播放| 亚洲区一区二在线视频| 张北县| 男女在线免费视频网站| 久久精品国产精品亚洲婷婷| 色乱码一区二区三区在线| 国产精品国三级国产av| 国产亚洲视频在线观看播放| 国产精品自偷自偷人妻熟女| 国产后入内射在线观看| 亚洲VR永久无码一区| 精品无码一区二区三区小说| 日韩在线手机专区av|