js 当中的预编译
来源:互联网 发布:郭靖黄蓉爱情知乎 编辑:程序博客网 时间:2024/05/17 22:54
今天同事问我一个js的问题
var tt = 'aa'; //v1 function test(){ alert(tt); //underfined; var tt = 'dd'; //v2alert(tt); //dd } test();
alert(tt)此时为什么会是underfined ,因为我也是js新手所以也不知道原因。所以上网找了一下。经过查找我整理了一下原因。
在js中对所有的var变量声明与函数声明都做了预编译,分配了存储单元,但是请注意只有使用var关键字声明的变量无论是局部变量还是全局变量都会预编译,但是在预编译阶段并不会完成初始化操作。在本例中变量tt 和函数test()在编译阶段都做了预编译处理。当执行的时候先对v1处的tt初始化。然后调用test()进入到函数体内部执行。执行alert(tt)语句。因为在预编译阶段已经记录了函数体内v2出的tt的声明,所以编译器会取函数体内部定义的tt(v2),但是tt(v2)只有声明(值为"undefined"),所以alert出来的就是"undefined". 如果没有函数体内的tt(v2)的定义语句,js解释器在函数体内找不到tt的定义,就会往上一层次寻找,本例中就是到函数体外寻找tt(全局变量)的定义,这时的tt已经初始化过了,所以这个时候alert出来就是aa了。
- js 当中的预编译
- js的预编译理解
- JS当中的拷贝!!!
- 老生长谈的JS预编译
- Handlebars.js 预编译
- js预编译机制
- JS之预编译
- js预编译规则
- js预编译
- js的预编译(很神奇的东西)
- js预编译和解析
- JS运行三部曲---预编译
- js(四)---预编译
- 构建基于 NodeJS 的 LESS.js 预编译 CSS 服务
- JS预编译对全局变量和命名函数的处理
- 预编译的理解
- javaScript的预编译
- 预编译的作用
- 删除可执行文件的图标
- hdu2767Proving Equivalences(强连通+缩点)
- 最小生成树
- HDU 4354 Missile 树的最大独立集+枚举
- D3D混合纹理
- js 当中的预编译
- 离散化 和多维线段树
- 嵌入式开发基础----register和volatile关键字
- Oracle sql语句
- C可变参数的函数
- nbutoj1482
- C++的namespace详解1
- 重載、覆蓋、隱藏
- Code Fragmen-重载的方法,参数少的去调用参数多的。