JavaScript作用域原理(二)——预编译
2014-09-29 08:57
85 查看
JavaScript是一种脚本语言, 它的执行过程, 是一种翻译执行的过程。并且JavaScript是有预编译过程的,在执行每一段脚本代码之前, 都会首先处理var关键字和function定义式(函数定义式和函数表达式)。
在调用函数执行之前, 会首先创建一个活动对象,然后搜寻这个函数中的局部变量定义和函数定义,变量的值会在真正执行的时候才计算,此时只是简单的赋为undefined。
对于函数定义式, 会将函数定义提前。而函数表达式,会在执行过程中才计算。
两个同名的函数scope_next2,分别输出不同的内容,后一个没有将前面一个的内容覆盖掉。
对预编译的理解上可能还有些问题,欢迎大家来指正。
修改记录:
2014.9.29 修改以段为处理单元的事例代码。
demo下载:
http://download.csdn.net/detail/loneleaf1/7983577
2014.9.29 demo下载:
http://download.csdn.net/download/loneleaf1/7989605
参考资料:
http://www.laruence.com/2009/05/28/863.html Javascript作用域原理
/article/1210737.html JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
/article/5086879.html Javascript之匿名函数(模仿块级作用域)
http://www.web-tinker.com/article/20331.html try-catch语句的“伪块作用域”
http://msdn.microsoft.com/zh-cn/library/bzt2dkta%28v=vs.94%29.aspx 变量作用域 (JavaScript)
/article/6948395.html javascript变量的作用域
/article/1306664.html 深入浅出JavaScript变量作用域
一、变量执行之前,会被赋为undefined
<p id="scope2" style="color:red"></p>
function echo(p, html) { p.innerHTML += html + '<br/>'; } var pscope2 = document.getElementById('scope2'); echo(pscope2, typeof param); //结果:undefined var param = 'defined'; echo(pscope2, typeof param); //结果:string
在调用函数执行之前, 会首先创建一个活动对象,然后搜寻这个函数中的局部变量定义和函数定义,变量的值会在真正执行的时候才计算,此时只是简单的赋为undefined。
二、函数定义式和函数表达式的不同
echo(pscope2, typeof scope2); //结果:function echo(pscope2, typeof func); //结果:undefined function scope2() { //函数定义式 }; var func = function() { //函数表达式 }; echo(pscope2, typeof func); //结果:function
对于函数定义式, 会将函数定义提前。而函数表达式,会在执行过程中才计算。
三、以段为处理单元
<script type="text/javascript"> echo(pscope2, typeof scope_next2);//结果:undefined </script> <script type="text/javascript"> function scope_next2() { }; </script>
<script type="text/javascript"> function scope_next2() {//以段为处理单元 pscope2.innerHTML += 'in first scope_next2<br/>'; }; //echo(pscope2, typeof scope_next2);//结果:undefined scope_next2(); </script> <script type="text/javascript"> var pscope2 = document.getElementById('scope2'); function scope_next2() { pscope2.innerHTML += 'in second scope_next2<br/>'; } scope_next2(); </script>
两个同名的函数scope_next2,分别输出不同的内容,后一个没有将前面一个的内容覆盖掉。
对预编译的理解上可能还有些问题,欢迎大家来指正。
修改记录:
2014.9.29 修改以段为处理单元的事例代码。
demo下载:
http://download.csdn.net/detail/loneleaf1/7983577
2014.9.29 demo下载:
http://download.csdn.net/download/loneleaf1/7989605
参考资料:
http://www.laruence.com/2009/05/28/863.html Javascript作用域原理
/article/1210737.html JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
/article/5086879.html Javascript之匿名函数(模仿块级作用域)
http://www.web-tinker.com/article/20331.html try-catch语句的“伪块作用域”
http://msdn.microsoft.com/zh-cn/library/bzt2dkta%28v=vs.94%29.aspx 变量作用域 (JavaScript)
/article/6948395.html javascript变量的作用域
/article/1306664.html 深入浅出JavaScript变量作用域
相关文章推荐
- .NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析
- 无法打开预编译头文件的解决方法及预编译头原理[ZZ]
- PreparedStatement 预编译原理 可防止SQL注入
- .NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析(转贴)
- JAVA中JDBC预编译原理
- JavaScript 预编译(变量提升和函数提升的原理)
- PreparedStatement 预编译原理
- JavaScript作用域原理——预编译
- 预编译,编译,链接的原理
- 无法打开预编译头文件的解决方法及预编译头原理
- JavaScript作用域原理——预编译
- PreparedStatement 预编译原理 (From@_@http://choelea.javaeye.com)
- JDBC中的——PreparedStatement 预编译原理
- .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析
- .NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析
- 无法打开预编译头文件的解决方法及预编译头原理
- [收藏].NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析
- PreparedStatement 预编译原理
- Javascript作用域、闭包原理以及性能问题
- PreparedStatement 预编译原理