js解析与执行过程

js解析与执行过程分为全局与局部

1:全局,预处理阶段===>执行阶段

2.局部(函数),预处理阶段===>执行阶段

 全局:预处理

 全局的词法环境===window{

a:undefined

b:对函数的一个引用

     }

在全局下找到:
用var定义的变量    eg:var a=5    
用声明方式创建的函数   eg:function b(){}  ,加入到全局的词法环境中

console.log(a);        //undefined
console.log(b);        //报错
console.log(c);        //函数体
console.log(d);        //undefined
var a=2;
b=1;
function c(){alert(11)}
var d=function(){}

f();        //弹出fff
g();        //报错
function f(){alert('fffff')};
var g=function(){alert('ggg')}; //函数表达式

预处理阶段先扫描函数声明后扫描用var的变量声明

//处理函数声明有冲突会覆盖
a();      //function a(){alert(222)};
function a(){alert(111)};
function a(){alert(222)};
处理变量声明有冲突会忽略
a();        //function a(){alert(111)};
function a(){alert(111)};
var a=11111;

执行阶段:从上到下执行,碰到全局词法下有的覆盖其值,没有的则加入全局词法

局部(函数)预处理:

每调用一次产生一个词法环境

                先函数的参数

 内部声明式函数

 内部var变量

 冲突情况与全局处理一样

如果没有用var声明的变量,会变成最外部词法环境的成员

 

猜你喜欢

转载自blog.csdn.net/liuhua_2323/article/details/83050677