简单解释预编译,与变量提升

简单形容一下预编译

这是我的第一篇内容,只是因为在看视频的时候发现了一个问题,利用这篇博客来记录一下,因为正在参加前端培训,自己的技术水平也是非常的垃圾,曾经在学习Android的时候就在CSDN上解决过很多问题,希望我的博客能对您有所帮助

这是一道非常简单的题目,主要的内容就是分析代码执行的顺序,判断输出内容:

    a = 100
    function demo(e){
        function e(){}
        arguments[0]=2;
        console.log(e)              //  2
        if(a>10){               
            var b=123;                 //在if语句中不可以定义变量
            function c(){                //语法bug 在if语句中不能定义函数
            }
        }
        var c;
        a=10
        var a;
        f=123;//全局变量
         console.log(b)          // //undefined
        console.log(c)            //undefined
        console.log(a)          // 10
    }
    var a;
    demo(1)                             
    console.log(a)                   //100
    console.log(f)                    //123

这道题非常简单,如果掌握了预编译的话,那么代码判断执行会很好理解,

预编译其实就是当你写出一篇代码时,系统会在代码执行的前一刻自动扫描一遍你的代码,检查你是否出现了低级的语法错误,找到你所定义的全局变量以及函数;

这里先说一下变量提升:
函数声明整体提升:就是只要你定义了一个函数,不论你将函数写在哪里,系统总会将这个函数放置在最前面,所以你只要定义了这个函数,不论在那个位置都可以调用
变量 声明提升:如果你现在定义了一个变量 var a=123 (函数声明+赋值) 系统会将var a放置在最前面而a=123还依旧在原来的位置

在你所有的代码执行前,系统会创建一个GO对象来进行预编译:
所有被声明的全局变量核函数都属于GO的属性,所有没有被声明直接被赋值的对象也都属于全局变量,成为GO的属性
GO===window 可以说GO与window相同GO的属性就是window的属性

而在你的函数执行前系统也会创建一个AO的对象,来进行预编译找到你定义的变量以及函数,与GO一样只是一个是用来对全局进行编译,一个对函数进行编译

所以在这道题目里先判断GO:
GO{
a:100,
demo:function(){},
f:123

其次判断AO{
e:1,
b:undefined,
c:undefined,
a:10

根据这些就可以判断出该打印出哪些结果了。

不知道有没有哪些好的教程视频 大佬们能给我推荐一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值