js函数中的预编译
2012-10-31 16:23
176 查看
<html> <head> <title></title> </head> <body> <script> myname = "global"; function func(){ alert(myname);//undefined why? var myname = "local"; alert(myname); } func(); </script> </body> </html>
为什么全局变量有声明myname而在函数体内却获取不到值呢?(可以自己调试看看)
根据《javascript 权威指南》中的说法是,函数体在执行之前有个“预编译”状态,即在执行函数体之前,js首先对函数体中的变量进行了遍历。当“预编译”过程中发现函数体有对函数的声明,那么它会在开头部分首先进行隐式的声明。如下列代码:
<html> <head> <title></title> </head> <body> <script> myname = "global"; function func(){ var myname; //myname=undefined alert(myname); var myname = "local"; alert(myname); } func(); </script> </body> </html>
于是最后就出现了有全局变量,但是无法获取值的原因,因为它在函数体内被重新赋值成局部变量了。
文件下载:http://pan.baidu.com/share/link?shareid=90637&uk=3221702211
相关文章推荐
- 【Web】artTemplate模板引擎:编译(生成渲染函数)+渲染(生成HTML串) 模板:基于JS的语法(JS+自定义)+HTML
- js代码执行过程,js预编译,变量声明提升,函数体整体提升
- js函数编译时机
- JS预编译对全局变量和命名函数的处理
- js的三个uri编译函数的用法和区别
- window.addEventListener来解决让一个js事件执行多个函数
- JS 立即执行的函数表达式(function)写法
- js中的函数劫持
- js中escape对应的C#解码函数
- 澄清误解,详解JS立即执行函数
- js延迟执行函数的方法
- javascript中iframe里面的页面调用父窗口js函数的方法
- 判断js函数是否存在,如果存在则执行
- JS 立即执行的函数表达式(function)写法
- js自执行函数的几种不同写法的比较
- 【js事件详解】js事件封装函数,js跨浏览器事件处理机制
- js中通过函数名字符串调用函数
- [iOS]在WebApp中如何使用JS调用iOS的函数
- js时间格式化函数,支持Unix时间戳
- js时间格式化函数,支持Unix时间戳