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

实例讲解js中的预编译

时间:2014-05-14 00:11:19      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   c   

           js作为一本脚本语言,可以不经过编译直接运行,但遇到预编译的问题,尤其是变量或函数同名时,这点知识就尤其必要了。为了更好地了解js语言背后的运行机理。笔者采用实例化的方式讲解我理解的预编译。

   理解预编译首先要弄清楚两种概念:函数声明和变量赋值。

function ledi(){ }//函数声明

这种形式的写法是函数声明,即声明一个函数,脚本在执行之前会做预编译处理。

var ledi= function(){ }//变量赋值


   这种写法是变量赋值,函数在js语言里也是一种数据,匿名函数作为变量赋值给定义的变量。这种形式在预编译处理阶段,只会给变量ledi分配一个内存空间,不会做初始化。初始化过程中会在执行时执行。

   好了,弄清楚以上概念,上实例。实例参考(点击此处)。原作者只详细解释了前两个实例,而笔者看来,接着的两个也非常重要,那么笔者就甄别出代表性来讲解。

示例代码一:

function ledi(){ 
alert(‘ledi1‘); 
}; 

ledi(); 
function ledi(){ 
alert(‘ledi2‘); 
}; 
ledi(); 

   这段代码,首先判断两个都属于函数声明。都会在预编译阶段处理,而函数名相同,会按后定义的来定义函数,在执行阶段只会看到后定义的函数结果,也就不难理解了。

示例代码二:

var ledi = function(){alert(‘ledi1‘);}; 
ledi(); 
ledi = function(){alert(‘ledi2‘);}; 
ledi(); 

  这段代码,首先判断两种都属于变量赋值。在预编译阶段,两个变量名一样,分配一个内存空间存放变量ledi内容。当代码执行时,按照顺序执行和赋值,会先后得到两种结果。

示例代码三:

function ledi(){alert(‘ledi1‘);}; 
ledi(); 
ledi = function (){alert(‘ledi2‘);}; 
ledi(); 

   这段代码,首先判断,前一种属于函数声明,后一种属于变量赋值。预编译处理完,首先执行第二行,实际上是第一行的内容,第三行相当于将ledi变量重新赋值即初始化,重新赋值后,第四行执行第三行的函数。

示例代码四:

window.alert(ledi);
function ledi(){
}
//这四行代码分开执行
window.alert(ledi);
var ledi = 123;

  以上代码分开执行,可验证,函数预编译会执行,变量赋值则是先分配空间,执行时再赋值。

实例讲解js中的预编译,布布扣,bubuko.com

实例讲解js中的预编译

标签:style   blog   class   code   java   c   

原文地址:http://blog.csdn.net/yingyiledi/article/details/25634607

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