JavaScript预编译

js执行过程三步:

  • 语法分析

       通篇扫描是否存在语法错误。比如少个括号之类

  • 预编译

      函数声明 整体提升

test();

function test() {
    console.log(1);
}

      变量  声明提升

console.log(a); //输出 undefined

var a = 123;

预编译前奏

  1. imply global 暗示全局变量:如果变量未经声明就使用,即为全局变量;window
  2. 全局上的任何变量,即使声明了,也归window所有 window就是全局的域
function test() {
    var a = b = 123;
}

test();

console.log(a); // a is not defined

console.log(b); // 123 未声明的变量 即为 window所有。window.b => 123

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

// 1. 创建AO对象(activation object)执行期上下文
// 2. 找形参和变量声明,将变量和形参名作为AO属性名,值未undefined
// 3. 将实参值和形参值统一
// 4. 在函数体里面找函数声明,值赋予函数体

// GO 同理 global object  GO === window
// AO 有值 AO取 没值就往GO取

// 第二步
//AO{
// a: undefined,
// b: undefined
//}

//第三步
//AO {
//  a: 1,
//  b: undefined
//}

//第四步
//AO{
//  a: function a() {},
//  b: undefined,
//  d: function d() {}
//}

function test(a) {
    console.log(a); // function a() {};

    var a = 123; // a = 123

    function a() {}

    console.log(a); // 123;

    var b = function() {}

    console.log(b); // b => function (){}
    function d() {}
}
test(1)
  • 解释执行

        读一行执行一行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值