JavaScript中函數作用域之精闢,函數原理的淺入深出,及程序執行預編譯之通天編譯???

1.程序執行的前一刻會先將代碼預編譯一遍,如果有語法錯誤則直接終止程序運行

//預編譯之通天編譯 --> 在執行的前一刻,會把文件通天掃描一遍
/**

  • //預編譯 函數整體提升(即函數會放到程序最頂端) 變量提升 (即 var a = 123 ; 難麼會將a變量提升,則值是undefined)
  • 未先聲明變量就賦值的歸全局所有 即Windows ,在程序執行則會創建一個Go{ } 對象 = Window{ }
  • 1.先創建一個AO對象
  • 2.再將函數形參和變量存入AO對象中,初始爲undefined
  • 3.在將相應參數值從執行順序往AO對象中傳值,後覆蓋前
  • 4.最後在執行程序,然後在AO對象中找
    */
// console.log(b);//undefined
// var b = 234;
// function test(a){
//     console.log(a)//fn
//     console.log(b)//234
//     var a = 123;
//     console.log(a)//123
//     function a(){}
//     b = 123 ;
//     console.log(b);//123
    
// }
// console.log(b);//234
// test(1);
// console.log(b);//123

預編譯示意圖

2.函數作用域之精闢及函數原理的淺入深出

這裏我就拿個上面那個列子稍微改動一下

 console.log(b);//undefined
        var b = 234 ;
        function test(a){
            console.log(a) //fna
            function a(){
                a = 123456 ;
                function c(){c = 789;}
            }
            console.log(b) //fnb
            var a = 123 ;
            console.log(a) ; //123
            b();
            function b(){
                console.log(b) ;//undefined
                c = 666 ;
                var b = 456 ;
                console.log(b) ;//456
            }
            console.log(c) ;//666
            c = 999 ;
            b = 123 ;
            console.log(b);//123
        }
    test(1);
    console.log(c); //999
    console.log(b); //234
i.這裏我直接在終端運行了,如圖所示函數作用域解析及原理示意圖
ii.在Chrome 瀏覽器運行程序的示意圖

在這裏插入圖片描述

這裏我在給出評論區了給出了幾個案例,歡迎在評論區留下你的答案哦,我不會告訴你不可以直接速知答案的哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章