js中的预编译

JavaScript是解释型语言,
既然是解释型语言,就是编译一行,执行一行
传统的编译会经历很多步骤,分词、解析、代码生成什么的

javaScript运行三部曲

  • 语法分析
  • 预编译
  • 解释执行(就是执行代码)

预编译是什么?

预编译简单理解就是在内存中开辟一些空间,存放一些变量与函数

预编译四步

我们来看下这个代码

 function fn(a) {
    console.log(a); 
    var a = 123;
      console.log(a); 
      function a(){ }
 	 console.log(a); 
    var b = function(){ }//注意这不是个函数体
     console.log(b);
     function d(){ }
}
fn(1);
  1. 首先在函数执行前创建一个OA对象
OA{

}
  1. 找到函数形参和变量声明,将函数和形参名的作为Ao对象的属性名,值为undefined
OA{
	a:undefined
	b:undefined
}
  1. 实参形参相统一
OA{
	a:1
	b:undefined
}
  1. 找到函数中的函数定义,函数名为AO对象属性名,值为函数体
OA{
	a:function a(){ }
	b:undefined
	d:function d(){ }
}

最后一步一步的执行代码

function fn(a) {
 	console.log(a);//代码第一句,所以输出function a(){ }
  var a = 123;//后OA对象里面为
OA{
	a:123
	b:undefined
	d:function d(){ }	
}
	console.log(a);//输出所以是123
	 function a(){ }
 	console.log(a); //这里输出也是123
	 var b = function(){ }//执行到这里的时候OA里面发生了变化
OA{
	a:123
	b:function(){ }
	d:function d(){ }	
}
	 console.log(b);// var b不执行 改变AO对象中的属性b为function(){}
 
 	 function d(){ }
 }
fn(1);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值