JavaScript预编译
Posted xiaonongfu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript预编译相关的知识,希望对你有一定的参考价值。
javascript是一种解释性语言,一般说来说是解释一句就执行一句,但是其实并没有那么直观。
JavaScript执行分三步,
第一步叫做语法分析。整体扫描一遍,看有没有少写一个大括号啥的,用了中文的标点符号啥的。但不执行。
第二步叫做预编译。预编译发生在函数执行的前一刻。
1. 预编译前奏
①imply global暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象(window)所有。如:
a = 123;
var a = b = 123;
②一切声明的全局变量也都归全局对象(window)所有。
var a = 123; ===> window.a = 123;
2. 1.函数预编译四部曲
① 创建AO(activation object),活跃对象,就是我们平时理解的作用域,专业一点就叫执行期上下文。
②找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
③将实参值和形参统一
④在函数体里面找函数声明,值赋予函数体
第三步解释执行。
比如:
function text(a, b){ console.log(a); c = 0; var c; a = 3; b = 2; console.log(b); function b(){} function d(){} console.log(b); } text(1);
创建AO对象
AO{
a : undefined ==>1 ==>3
b : undefined ==>function b(){} ==>2
c : undefined
d : undefined ==>function d(){}
}
然后是执行,执行过程,操作的还是预编译过程中创建的AO对象。
AO{
a : undefined ==>1
b : undefined ==>function b(){}
c : undefined ==>0
d : undefined ==>function d(){}
}
所以结果应该是:1
2
2
全局预编译
1.生成了一个GO(Global Object)对象,这个东西就是window。GO == window。
以上是关于JavaScript预编译的主要内容,如果未能解决你的问题,请参考以下文章