您的位置:首页 > Web前端 > JavaScript

js的解析和执行过程

2016-09-22 11:00 246 查看
今天开始学习,js面向对象方面,以前了解的不够深入,有很多疑问,这次争取解决大部分疑问,对js的掌握更上一层楼。

首先,js代码分为预处理和执行两个阶段,可以分为全局和函数两个不同的部分。

全局在预处理阶段会创建一个全局的词法环境,也就是window,然后扫描var声明或函数声明。函数名与函数名或变量名冲突处理方法:
处理函数声明冲突时会覆盖,处理变量声明时冲突会忽略


<script type="text/javascript">
//预处理阶段扫描所有var定义 并添加到词法环境,变量为undefined,函数为函数体
/*
预处理阶段类似于 Lexical Environment{
a:undefined,
b:function b(){
console.log(11);
},
}
* */
alert(a);//undefined
alert(b);//undefined

var a = 1;//赋值
var b = 2;//执行时赋值,覆盖b:2
function b(){
console.log(11);
}
alert(a);//1赋值完成后弹出相应的值
alert(b);//2

</script>


函数在预处理阶段,会产生一个函数词法环境,每次调用都会产生一个词法环境,如果函数有参数,词法环境就首先包含参数,依次是声明式函数及var变量,冲突情况和全局一样。执行阶段给预处理阶段的成员赋值,如果没有用var声明的变量,会成为外部词法环境的成员。

/*
f{
a:1,
b:2,
c:undefined,
d:function d(){
console.log(c);
console.log(e);
var e = 1;
console.log(1);
}
}
* */
function f(a,b)
{
alert(a);//1
alert(b);//2
alert(c);//undefined
alert(d);
var c = 1;
function d(){
console.log(e);
var e = 1;
console.log(1);
}
d();
}
f(1,2);


这个只是为后面作用域和闭包做铺垫,了解预处理,可以清楚的知道js代码解析执行过程。加深理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息