JavaScript——预编译

预编译

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

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

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

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

函数声明整体提升:

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

变量声明提升:var a=123;

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

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

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

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

2.找形参和变量声明,将变量和形参作为AO的属性挂上去,值为undefined。

3.将实参值与形参相统一,就是将实参的值放到形参中去。

4.在函数体中找函数声明,将函数名作为AO的属性挂上去,将函数的值(也就是函数体)挂在AO里的对应函数名上。(如果之前变量或形参存在同名属性,这时都会被覆盖!!!)

执行时,都会从AO中找对应属性和方法!!!

全局上的预编译

Go===window

1.创建GO对象 Global Object

2.变量声明提升,赋值undefined

3.函数声明提升,赋值

全局变量

一切变量未经声明,就直接赋值,就属于全局变量,即全局对象window的变量;

一切声明的全局变量,归window所有。(window就是全局的域(作用域其实也是一个对象))

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容