JavaScript——预编译

预编译

js属于单线程的解释型语言,单线程暂且不论。

解释型语言就是读一行执行一行的意思,不过在执行之前,会有语法分析和预编译两个过程。

语法分析意思就是在执行代码之前,会先扫描代码一遍,但是不执行,只是为了检测有没有什么语法错误等等。

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

函数声明整体提升:

如果写了一个函数声明,系统会把其提升到逻辑的最顶部,所以无论在哪里调用,实际上都是在其下面调用

变量声明提升:var a=123;
var a叫做变量声明,a=123;叫做变量赋值。

只要声明了,就会提升到顶部,但是在没赋值之前,输出的值为undefined;

函数体内预编译的四部曲:

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

AO{
    	a:	,
    	
    	b:	,
    	
    	d:
}

2.找形参和变量声明,将变量和形参作为AO的属性挂上去,值为undefined。
3.将实参值与形参相统一,就是将实参的值放到形参中去。
4.在函数体中找函数声明,将函数名作为AO的属性挂上去,将函数的值(也就是函数体)挂在AO里的对应函数名上。(如果之前变量或形参存在同名属性,这时都会被覆盖!!!)
执行时,都会从AO中找对应属性和方法!!!

全局上的预编译

Go===window
1.创建GO对象 Global Object
2.变量声明提升,赋值undefined
3.函数声明提升,赋值

全局变量

一切变量未经声明,就直接赋值,就属于全局变量,即全局对象window的变量;
一切声明的全局变量,归window所有。(window就是全局的域(作用域其实也是一个对象))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值