ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript——预编译

2019-03-12 21:52:13  阅读:176  来源: 互联网

标签:函数 JavaScript AO 编译 赋值 声明 变量


预编译

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就是全局的域(作用域其实也是一个对象))

标签:函数,JavaScript,AO,编译,赋值,声明,变量
来源: https://blog.csdn.net/Abby_zzy/article/details/88362555

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有