JS预编译

JS执行顺序

1,语法分析

在进行代码运行时,会先扫描整个代码,查看是否有语法错误

2,预编译

3,解释执行

--------------------------------------------

预编译:

依然能够执行,是因为有预编译的作用

看下面三段代码:

前提知识点:

imply global 暗示全局变量:即任何变量,如果有任何变量未经声明,就赋值,则此变量会作为全局变量,归window所有。

全局声明的变量,也归window所有

window就是全局的域,比如你 var a = 10;那我们去哪里拿到a呢,a就在window里面,相当于:

window{

    a :123

}

b是由于未经声明,就使用的变量,所以b就归window所有,而a不是

函数预编译的执行过程:

1,创建AO对象(Activation Object 执行期上下文)

2,找到形参和变量声明,并将形参和变量名作为AO对象属性名,值为undefined

AO{

     a :undefined

     b :undefined

}

3,将实参值和形参统一

AO{

     a :1

     b :undefined

}

4,找函数体里的函数声明(b不是哦,是函数变量),值赋予函数体

AO{

     a :function a() {}

     b :undefined

     d :function d() {}

}

接下来看执行:

(1),去AO对象里输出a ,

(2),a的声明以及声明过了,所以不用去看,后面是对a的赋值

同时

AO对象改变:

AO{

     a :123

     b :undefined

     d :function d() {}

}

(3)去AO对象里找到a,并打印

(4)预编译处理过了,所以不看了

(5)还是去AO里面找到a,打印出123

(6)声明b预编译已经处理过了,所以看后面对b的赋值,同时AO对象改变

AO{

     a :123

     b :function() {} 

     d :function d() {}

}

(7)去AO里面找到b,并且输出

(8)预编译处理过了,所以不看了

整体的输出:

还有一点注意的是:预编译发生在函数执行的前一刻

看下面两道题

全局预编译的执行过程:

1,生成一个GO对象 (Global Object)

2,找到变量声明,并将变量作为GO对象属性名,值为undefined

3,找到函数声明,并将函数体作为值赋值

GO === window

接下来再看一道题目:

再看一道题

再看下面一道:

预编译不管if的判断,打破if,里面声明的变量,该声明还是要声明

来看一道题目:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值