Javascript预编译和执行过程
2012-01-11 16:32
399 查看
1. 在执行前会进行类似“预编译”的操作:首先会创建一个当前执行环境下的活动对象,并将那些用var申明的变量设置为活动对象的属性,但是此时这些变量的赋值都是undefined,并将那些以function定义的函数也添加为活动对象的属性,而且它们的值正是函数的定义。
2.在解释执行阶段,遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到而且该执行环境的拥有者有prototype属性时则会从prototype链中查找,否则将会按照作用域链查找。遇到var a = ...这样的语句时会给相应的变量进行赋值(注意:变量的赋值是在解释执行阶段完成的,如果在这之前使用变量,它的值会是undefined)
根据以上说明的一些测试:
<script type="text/javascript">
alert(myName); //undefined
var myName = "hong";
alert(myName); //hong
</script>
<script type="text/javascript">
func(); //hello
function func(){
alert("hello!")
}
</script>
<script type="text/javascript">
/*在预编译过程中func是window环境下的活动对象中的一个属性,值是一个函数,覆盖了undefined值*/
alert(func); //function func
var func = "this is a variable"
function func(){
alert("hello!")
}
/*在执行过程中遇到了var重新赋值为"this is a variable"*/
alert(func); //this is a variable
</script>
<script type="text/javascript">
/*在预编译过程中func是window环境下的活动对象中的一个属性,值是一个函数,覆盖了undefined值*/
alert(func); //function func
alert(func()); // abc
var func = "this is a variable";
alert(dd);
function func(){
alert("hello!")
return 'abc';
}
function dd(){
}
alert(window.abc);
window.abc=function cde(){
alert('aaaaa');
};
alert(window.abc);
alert(window.abc());
/*在执行过程中遇到了var重新赋值为"this is a variable"*/
alert(func); //this is a variable
alert(func());//会报错,此时是一个变量Sring值
</script>
<script type="text/javascript">
var name = "hong";
function func(){
/*首先,在func环境内先把name赋值为undefined,然后在执行过程中先寻找func环境下的活动对象的name属性,此时之前已经预编译值为undefined,所以输出是undefined,而不 是hong*/
alert(name); //undefined
var name = "JSF";
alert(name); //JSF
}
func();
alert(name); //hong
</script>
http://www.cnblogs.com/zhangjh/articles/1895472.html
2.在解释执行阶段,遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到而且该执行环境的拥有者有prototype属性时则会从prototype链中查找,否则将会按照作用域链查找。遇到var a = ...这样的语句时会给相应的变量进行赋值(注意:变量的赋值是在解释执行阶段完成的,如果在这之前使用变量,它的值会是undefined)
根据以上说明的一些测试:
<script type="text/javascript">
alert(myName); //undefined
var myName = "hong";
alert(myName); //hong
</script>
<script type="text/javascript">
func(); //hello
function func(){
alert("hello!")
}
</script>
<script type="text/javascript">
/*在预编译过程中func是window环境下的活动对象中的一个属性,值是一个函数,覆盖了undefined值*/
alert(func); //function func
var func = "this is a variable"
function func(){
alert("hello!")
}
/*在执行过程中遇到了var重新赋值为"this is a variable"*/
alert(func); //this is a variable
</script>
<script type="text/javascript">
/*在预编译过程中func是window环境下的活动对象中的一个属性,值是一个函数,覆盖了undefined值*/
alert(func); //function func
alert(func()); // abc
var func = "this is a variable";
alert(dd);
function func(){
alert("hello!")
return 'abc';
}
function dd(){
}
alert(window.abc);
window.abc=function cde(){
alert('aaaaa');
};
alert(window.abc);
alert(window.abc());
/*在执行过程中遇到了var重新赋值为"this is a variable"*/
alert(func); //this is a variable
alert(func());//会报错,此时是一个变量Sring值
</script>
<script type="text/javascript">
var name = "hong";
function func(){
/*首先,在func环境内先把name赋值为undefined,然后在执行过程中先寻找func环境下的活动对象的name属性,此时之前已经预编译值为undefined,所以输出是undefined,而不 是hong*/
alert(name); //undefined
var name = "JSF";
alert(name); //JSF
}
func();
alert(name); //hong
</script>
http://www.cnblogs.com/zhangjh/articles/1895472.html
相关文章推荐
- javascript 编译与执行过程
- Javascript预编译和执行过程
- Javascript预编译和执行过程
- javascript中预编译与执行过程详解
- Javascript预编译和执行过程
- javascript预编译和执行过程总结
- Javascript预编译和执行过程
- java代码的编译和执行过程
- C/C++程序从编译到最终生成可执行文件的过程分析
- 【SQL Server】存储过程的设计概念(3)T-SQL的编译和执行过程
- [c#基础系列二]:从编译,执行过程理解c#
- JavaScript高级 面向对象(13)--构造函数的执行过程
- JVM学习笔记(二)------Java代码编译和执行的整个过程
- JVM学习笔记(二)------Java代码编译和执行的整个过程
- java编译执行过程
- 【死磕JVM】——-2、Java代码编译和执行的整个过程
- Java代码编译和执行的整个过程
- Linux下C语言执行过程(预处理,编译,汇编,链接,执行)
- Java编译与执行过程分析
- 用JavaScript事件串连执行多个处理过程的方法