注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

叶落非殇

charset="UTF-8"

 
 
 

日志

 
 

JavaScript预编译与执行  

2015-06-06 22:48:19|  分类: JavaScript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
初学JavaScript的时候,会提到预编译期这么一个概念,字面上理解就是在执行之前进行预处理,网上看了一些博客,但对于初学者来说有些地方理解起来还是很生涩。
关于预编译,网上有很多归纳,还有一句话精简的定义,这里归纳下自己的一些理解。
预编译期到底在干什么:
一、对变量进行声明,并声明其类型为undefined;
二、然后对函数名进行声明,并对函数体进行处理(但不是执行)匿名函数不会预编译。
三、预编译期,只对变量进行声明,不赋值处理。
下面用几个例子来说明,预编译时到底做了什么。

function a() {

alert("Hello");

}

a();

function a() {

alert("Hello World");

}

a();

这里预编译阶段会对函数进行声明,等同于以下代码

var a = function () {

alert("Hello");

}

var a = function () {

alert("Hello World");

}

a();

a();

由于函数名相同,在处理过程中,后面的函数体将前面的覆盖,所以输出结果会是“Hello World Hello World”;


function b() {

console.log("Hello");

}

console.log(b());

var b = function() {

console.log("Hello World");

}

console.log(b());

由于匿名函数不处理,那么以上代码等同于

var b = function() {

console.log("Hello");

}

console.log(b());

var b = function() {

console.log("Hello World");

}

console.log(b());

所以其结果为“Hello Hello World”


alert(c);

var c = "Hello World";

由于变量只是进行声明并未赋值,其等效代码如下

var c = undefined;

alert(c);

c = "Hello World";

所以执行后结果为undefined。
  评论这张
 
阅读(28)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017