码迷,mamicode.com
首页 > Web开发 > 详细

js预编译

时间:2016-09-28 12:34:14      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

先来做三个测试

eg1:

1 var a;
2 a = 1;
3 
4 function a() {};
5 console.log(a);

eg2:

1 var a;
2 function a() {};
3 console.log(a);

eg3:

1 var a;
2 function a() {};
3 a = 1;
4 console.log(a);

eg1:输出1   eg2:输出a方法   eg3:输出1

为什么输出结果是这样的?

先来看看js预编译实现过程:

  1.js首先扫描var关键字,提前到顶端;

  2.然后扫描function定义,提到var之后

  3.然后再顺序执行

那么上面的三个例子预编译形式分别如下:

eg1:

1 var a;
2 
3 function a() {};
4 a = 1;
5 console.log(a);

eg2:

1 var a;
2 
3 function a() {};
4 console.log(a);

eg3:

1 var a;
2 
3 function a() {};
4 a = 1;
5 console.log(a);

 

了解预编译过程后可以再来看看下面几个例子,试着先做一下

   1.

f();
function f(){
    console.log("a");
}

==========================================
f();
var f = function(){
    console.log("a");
}

第一个程序 运行输出:1 ;第二个程序运行报错,f is not a function()  

  2.

function f(){
    console.log("a");
}
f();
function f(){
    console.log("b");
}
f();
==========================================
function f(){
    console.log("a");
}
f();
var f = function(){
    console.log("b");
}
f();
=============================================
var f = function(){
    console.log("a");
}
f();
function(){
    console.log("b");
}
f();

第一个输出:b b   ;   第二个输出:a b   ;    第三个输出:a a

 

 

js引擎读取一段js代码,首先预编译,寻找全局变量和全局函数,遇到全局变量,把变量的值变为undifined存放在内存中,并不进行赋值操作,遇到全局函数,也是存放在内存中,如果这个过程中发现语法错误,预编译终止。

 

js预编译

标签:

原文地址:http://www.cnblogs.com/thonrt/p/5915568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!