文章目录
  1. 1. JavaSript的预编译模式
  2. 2. 实例
  3. 3. Reference

JavaSript的预编译模式

预编译模式代码不是从上到下,一行一行解析的!
预编译模式代码不是从上到下,一行一行解析的!
预编译模式代码不是从上到下,一行一行解析的!

编译阶段,解析引擎会把定义式的函数优先执行,也会把所有var变量创建,默认值为undefined,以提高程序的执行效率!
变量提升的作用也就符合了这个预编译的模式:
在一个函数体内声明的变量,JS解析器都会将其移动到函数体的顶部

实例

例1

1
2
3
4
5
6
7
8
9
var name = 'World!';
(function () {
if (typeof name === 'undefined') {
var name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();

分析:
这里面虽然有个if,但是归于其预编译模式,所以会爬到var name = 'Jack',因此在函数头会添加一行var name,那么name就变成了一个函数内的局部变量
最终输出Hello Jack

例2

1
2
3
4
5
6
(function(){
a = 5;
alert(window.a);
var a = 10;
alert(a);
})();

分析:
这里面还是需要有一个预编译的思想,这样的话就很容易知道a也会因为后面的var a = 10而引起变量提升变成一个函数内的局部变量,window.a其实根本没有被定义过(undefined)

Reference

question:变量提升_SegmentFault
Celte

文章目录
  1. 1. JavaSript的预编译模式
  2. 2. 实例
  3. 3. Reference