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 浏览器运行程序的示意图

在这里插入图片描述

这里我在给出评论区了给出了几个案例,欢迎在评论区留下你的答案哦,我不会告诉你不可以直接速知答案的哦

发布了19 篇原创文章 · 获赞 139 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/NanQiao1716/article/details/104629921