<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        通過函數作用域和塊級作用域看javascript的作用域鏈

        來源:懂視網 責編:小采 時間:2020-11-27 22:10:37
        文檔

        通過函數作用域和塊級作用域看javascript的作用域鏈

        通過函數作用域和塊級作用域看javascript的作用域鏈:在ES6之前,javascript只有全局作用域和函數作用域。所謂作用域就是一個變量定義并能夠被訪問到的范圍。也就是說如果一個變量定義在全局(window)上,那么在任何地方都能訪問到這個變量,如果這個變量定義在函數內部,那么就只能在函數內部訪問到這個變量。
        推薦度:
        導讀通過函數作用域和塊級作用域看javascript的作用域鏈:在ES6之前,javascript只有全局作用域和函數作用域。所謂作用域就是一個變量定義并能夠被訪問到的范圍。也就是說如果一個變量定義在全局(window)上,那么在任何地方都能訪問到這個變量,如果這個變量定義在函數內部,那么就只能在函數內部訪問到這個變量。

        在ES6之前,javascript只有全局作用域和函數作用域。所謂作用域就是一個變量定義并能夠被訪問到的范圍。也就是說如果一個變量定義在全局(window)上,那么在任何地方都能訪問到這個變量,如果這個變量定義在函數內部,那么就只能在函數內部訪問到這個變量。

        全局作用域只要頁面沒關閉就會一直存在,而函數作用域只有在函數執行的時候才存在,執行完就銷毀。且每次執行函數都會創建一個新的作用域。

        那么什么是作用域鏈呢?
        在了解作用域鏈之前,我們先了解一個執行期上下文的概念。

        執行期上下文:當函數執行時,會創建一個稱為執行期上下文的內部對象(即AO或GO),一個執行期上下文定義了一個函數的執行環境,函數每次執行時對應的執行期上下文都是獨一無二的,所以每次調用一個函數都會創建一個新的執行期上下文,當函數執行完畢,所產生的執行期上下文被銷毀。

        作用域鏈就是函數中[[scope]]屬性所存儲的執行期上下文對象的集合,這個集合呈鏈式鏈接,我們把這種鏈式鏈接叫做作用域鏈。

        作用域鏈更像是一種包含的關系。比如說函數A內部定義了一個函數B,所以B的定義是依賴于A的,也就是說B在A的內部,那么B中就可以訪問A的中的變量和方法。這種一層一層向上依賴的關系就構成了作用域鏈。

        為了更好理解,我們直接看例子。

        var name = 'xiaoyu';
        function fn1() {};
        function fn2() {
         var num = 10;
         function fn3() {
         var num1 = 10;
         console.log(num);
         };
         return fn3;
        }
        var fn4 = fn2();

        在上個例子我們知道,fn2執行的時候返回fn3,產生了閉包。但是一個函數執行然后返回另一個函數都會產生閉包嘛?我們來看一下。

        var name = 'xiaoyu';
        function fn1() {};
        function fn2() {
         var num = 10;
         function fn3() {//fn3函數沒有依賴fn2函數內的變量
         var num1 = 10;
         console.log(num1);
         };
         return fn3;
        }
        var fn4 = fn2();

        了解了作用域鏈之后,我們來看一個小例子,鞏固一下。

        var age = 10;
        var obj = {
         age: 12,
         test: function() {
         console.log(age);
         console.log(obj.age);
         console.log(this.age);
         }
        }
        obj.test();

        console.log(this.age)打印出12不難理解,但是為什么console.log(age)不也應該打印出12嘛。

        我們說test執行時首先會在自己的作用域內查看有沒有age變量,然后再沿著作用域鏈往上到全局作用域查找age變量,全局作用域下有age變量和data變量。所以console.log(age)打印出的10,如果要打印出12則需要訪問obj.age。

        ES6的塊級作用域

        在ES6之后,通過let和const引入了塊級作用域。即通過let和const聲明的變量只在聲明所在的塊級作用域內有效,并且let聲明的變量雖然屬于全局變量,但不再屬于全局對象window。

        我們通過一段代碼來看一下引入塊級作用域后,函數的作用域鏈的變化。

        var age = 10;
        let obj = {
         age: 12,
         test: function() {
         console.log(age);
         console.log(obj.age);
         console.log(this.age);
         }
        }
        obj.test();

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        通過函數作用域和塊級作用域看javascript的作用域鏈

        通過函數作用域和塊級作用域看javascript的作用域鏈:在ES6之前,javascript只有全局作用域和函數作用域。所謂作用域就是一個變量定義并能夠被訪問到的范圍。也就是說如果一個變量定義在全局(window)上,那么在任何地方都能訪問到這個變量,如果這個變量定義在函數內部,那么就只能在函數內部訪問到這個變量。
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品午夜视频| 亚洲另类无码专区丝袜| 1000部免费啪啪十八未年禁止观看| 亚洲成人动漫在线观看| 卡一卡二卡三在线入口免费| 羞羞视频免费观看| 国产成人亚洲综合无码精品| 亚洲免费综合色在线视频| 日韩在线视频免费| 久久亚洲AV无码精品色午夜| 国产无遮挡又黄又爽免费视频| 国产一精品一AV一免费| 亚洲人成网站18禁止| 狠狠色伊人亚洲综合成人| 四虎国产精品免费久久| 美女被免费网站91色| 国产亚洲精品VA片在线播放| 国产亚洲?V无码?V男人的天堂| 久久精品国产免费观看三人同眠 | 无遮挡国产高潮视频免费观看| 亚洲AV综合色区无码一区爱AV | 亚洲A丁香五香天堂网| 日韩人妻一区二区三区免费| 精品亚洲成A人在线观看青青| 亚洲精品线在线观看| 亚洲А∨精品天堂在线| 欧洲精品成人免费视频在线观看| 国产伦精品一区二区免费| 欧美激情综合亚洲一二区| 亚洲高清无在码在线电影不卡| 亚洲国产一区视频| 毛片a级毛片免费播放100| 一区二区三区观看免费中文视频在线播放| 亚洲精品无码少妇30P| 亚洲美女大bbbbbbbbb| 国产亚洲午夜高清国产拍精品| 成人免费无码视频在线网站| 毛片无码免费无码播放| 国产高清视频免费在线观看 | 一区二区免费在线观看| 亚洲AV无码片一区二区三区|