作用域鏈的一些小理解

函數(shù)中的變量作用域鏈

首先看一段代碼;

<script type="text/javascript">
        function ad(){
            var a=3;
            ap();
            function ap(){
            console.log(a)
            }
        }
        ad();//輸出的結(jié)果為3;
    </script>

以上代碼并不想去考慮 這個邊量a 在做用域鏈中的位置 我們只討論他是否在作用域鏈內(nèi)部,根據(jù)結(jié)果a是在ap的函數(shù)鏈內(nèi)部下面圖解a的位置

ap.png

;
再看零一段代碼

        var a='window';
        function ad(){
            var a=3;
            ap();   //這個時候輸出的結(jié)果為 window
        }
        ad();
        function ap(){
            console.log(a)
            }

那這時候有人會問了 調(diào)用ap的時候不是ad函數(shù)的內(nèi)部嗎為什么返回的值不是a


ap.png

根據(jù)上面的圖可清晰的認識到ad 和ap是同屬于window下的方法ap無權(quán)訪問ad內(nèi)的變量所這里的a的值為‘window’;

那么看另外一段代碼

        var a='window';
        function ad(){
            var a=3;
        function ap(){
            console.log(a)
            }
        }
        ad();
        ap();//報錯;
        

顯而易見之二段代碼是在外部想要訪問函數(shù)ad內(nèi)部的 函數(shù)ap顯然這是不現(xiàn)實的 因為函數(shù)ap在ad內(nèi)部相當于一個局部變量。這里要注意的石函數(shù)的聲明提前也只能在他的所在的作用域內(nèi)提前并不能越級提前到他的作用域外部;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容