JS-1-解析与执行

来源:互联网 发布:如何查看淘宝降权 编辑:程序博客网 时间:2024/06/03 20:41

js执行会分为2段,第一段是预处理阶段,在window中,第二阶段是执行阶段,赋值

一、js全局预处理阶段,会加载:

1、用声明的方式创建函数

2、用var定义的变量

举例:

f();

g();

var g = function(){} //函数表达式  报错

function f(){} //声明的方式


console.log(a);

console.log(b);

var a =5;

b=6; //报错

二、js全局预处理阶段策略

1、处理函数声明有冲突,会覆盖

2、处理变量声明有冲突,会忽略

举例:

alert(f);

function f(){

console.log(‘111’)

}

var f = 5; //忽略

function f(){ //覆盖

 cosole.log('222');

}

三、js全局执行阶段

alert(a); //undefined

//alert(b); //报错

alert(f); //function f()...

alert(g);//undefined

var a = 5;

b =6;

alert(b);

function f(){

console.log('f')

}

var g = function(){

console.log('g');

}

alert(g);

预处理阶段

window{

f:指向函数

a:undefined 

g:undefined

}

执行阶段

window{

f:指向函数

a:5

b:6

g:指向函数

}

四、函数预处理阶段

预处理阶段:a.每调用一次,产生一个LexicalEnvironment 

b.先函数的参数

c.内部声明式函数

d.内部var变量

e.冲突情况与全局处理一样

举例

function f(a,b){

alert(a)

alert(b);

var b = 100l

function a(){

}

}

f(1, 2);

//加载

lexical env{

a:1

b:2 //如果只传了一个参数 则b为undefind

arguments:

}

//处理函数内部

lexical env{

a:1 //覆盖 指向函数的引用

b:2 //忽略

arguments:

}

执行阶段:

a.给预处理阶段的成员赋值

b.如果没有用var声明的变量,会成为最外部LexicalEnvironment的成员