JS运行三部曲

  1. 语法分析

  2. 预编译

  3. 解释执行

下面两句话能解决问题,但解决不了深入的问题,其实原理是  预编译产生的两个现象(规律)。

  • 函数声明整体提升
  • 变量   声明提升

预编译前奏

imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有(全局对象是window)。

eg: a = 123;

eg: var a = b = 123;   这里的 b 是没有声明的,所以归window所有,所以如果这个表达式出现在局部函数,那么b会变成全局变量,而a是局部变量,值都是123

一切声明的全局变量,全是window的属性。

eg: a = 123;   相当于  window.a = 123;

window就是全局的域

预编译

eg - 预编译前:

预编译发生在函数执行前的前一刻

  1. 创建AO对象(Activation Object)
  2. 找形参和变量声明,将变量和形参名作为AO属性名,值为undefuned
  3. 将实参值和形参统一
  4. 在函数体里面找函数声明,值赋予函数体

eg - 预编译后:

全局的预编译原理是一样的,只是对象是GO(Global Object),window其实是GO的引用

2013百度面试题--

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1学习者1

打赏作者一杯咖啡与妹子坐坐吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值