javascript初级篇—预编译

本文介绍了JavaScript的运行机制,重点解析了预编译的概念。包括语法分析、预编译和解释执行三个步骤。预编译阶段涉及函数声明整体提升、变量声明提升以及隐式全局变量的创建。详细阐述了预编译的四部曲:创建AO对象、处理形参和变量声明、实参与形参的结合、函数声明的处理。并举例说明了预编译在函数执行前和全局作用域中的作用。
摘要由CSDN通过智能技术生成

js运行三部曲

语法分析(通篇扫描的过程)

预编译

解释执行

引例

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

在这个例子中,由于JavaScript是解释性语言,因此会解释一句执行一句。最终的结果为a.

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

如果是这种情况,将test()放在函数前面,结果依然能执行并且为a,这就是预编译的产生的效果.

在看一个例子

console.log(a);
var a = 123;

预编译前奏

函数声明整体提升:不管函数声明在任何位置,系统总会将它放在逻辑的最前面。
变量 声明提升:变量声明也会被系统放在最前面。

  1. imply global暗示全局变量:任何变量,如果变量未经声明就赋值,此变量就为全局对象(window)所有
    eg: a = 123;
    eg: var a = b =123;
  2. 一切声明的全局变量,全都是window的属性
    eg: var a = 123;====>window.a = 123;

预编译四部曲

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

例题:

function fn(a){
	console.log(a);
	var a = 123;
	function a(){}
	console.log(a);
	var b = function(){}
	console.log(b);
	function d(){}
}
fn(1);

解决方式:预编译发生在函数执行的前一刻

//根据四部曲得到的结果如下:
AO{
	a : function a(){},
	b : undefined,
	d : function d(){},
}
//根据函数执行结果如下:
AO{
	a : 123,
	b : function(){},
	d : function d(){},
}

预编译还发生在全局

  1. 生成GO对象(Global Object)====>window对象
  2. 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
  3. 将实参值和形参统一
  4. 在全局种寻找函数声明,值赋予函数体

GO对象比AO对象先产生


关注博主,每天分享一个小技巧!!!

阅读更多

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值