js预编译
Posted 吾将上下而求之
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js预编译相关的知识,希望对你有一定的参考价值。
1.js运行三部曲
语法分析 --> 预编译 -->解释执行
语法分析 --> 预编译 -->解释执行
1.1预编译
① 预编译前奏 —— 全局和局部的概念
console.log(a);
function a(a){
var a=234;
function a(){
}
}
var a=123;//全局和局部的概念
1.任何变量,如果变量未经过声明就赋值,次变量就归全局所有
eg:a=123;
var a = b = 123;
output: b:123
a:123
2.一切的全局变量,全是windows属性。
eg:var a=123;===>window.a=123;
②预编译
1.创建AO对象(执行期上下文 )//存储空间安库
2.找形参和变量声明,将变量和形参作为AO属性名,值为undefind
3.将实参和形参统一,
4.在函数体里面找函数声明,值赋予函数体
例一:
AO{
a:1,
b:undefind,
d:undefind
}
function a(){
console.log(a);//2
var a;
a=123;
console.log(a);
var b=function(){
}
function a(){}
var c=234;
console.log(b)
console.log(c)
}
AO:{
a:undefind =>2=>function a(){}=>123
b:undefind,
c:undefind=>234
}
a(2); //总结:1、预编译发生在函数执行的前一刻 2、解决函数执行顺序问题 函数声明整体提升,变量提升
例二:
function test(a,b){
console.log(a);
c=0;
var c;
a=3;
b=2;
console.log(b);
function b(){}
function d(){}
console.log(b)
}
AO:{
a:3;
b:2;
c:0;
d:function(){}
}
test(1);
以上是关于js预编译的主要内容,如果未能解决你的问题,请参考以下文章