Javascript预编译和执行过程
来源:互联网 发布:通信录管理系统c语言 编辑:程序博客网 时间:2024/06/05 05:51
之前一直使用javascript,但是对javascript的执行过程不太了解。今天网上看到一篇文章,感觉写得很好,分享给大家。
原文出处:http://www.cnblogs.com/zhangjh/articles/1895472.html#commentform
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(); //hellofunction func(){ alert("hello!")}</script><script type="text/javascript">/*在预编译过程中func是window环境下的活动对象中的一个属性,值是一个函数,覆盖了undefined值*/alert(func); //function funcvar 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">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>
0 0
- Javascript预编译和执行过程
- Javascript预编译和执行过程
- Javascript预编译和执行过程
- Javascript预编译和执行过程
- JavaScript运行过程中的“预编译阶段”和“执行阶段”
- javascript运行过程中的“预编译阶段”和“执行阶段”
- javascript运行过程中的“预编译阶段”和“执行阶段”
- Javascript的预编译和执行顺序
- javascript的预编译和执行顺序
- javascript中预编译与执行过程详解
- JavaScript预编译过程理解
- js预编译解析执行过程分析
- JavaScript面试之预编译与执行
- Javascript预编译和处理
- JavaScript预编译与执行顺序的关系
- javascript预编译原理和例子
- 预编译的过程
- javascript预编译
- JSON.stringify 语法实例讲解
- 获取硬盘序列号,CPU,mac地址等信息 win7下也行
- Gstreamer的一些基本概念与A/V同步分析
- zoj2588(割边)
- protobuf,thrift,avro之序列化性能测试
- Javascript预编译和执行过程
- 汽车坐垫的作用这么多 你都知道多少
- IOS 第三方管理库管理 CocoaPods
- C#动态创建DataTable
- symfony2路由
- 【LeetCode】Sort List 解题报告(对链表进行归并排序)
- 在Linux下编写Daemon
- 技术负责人的三种角色
- Post请求方式长度参数过长导致参数为空