您的位置:首页 > Web前端 > JavaScript

实例讲解js中的预编译

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

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

[javascript] view
plaincopy





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

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

[javascript] view
plaincopy





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

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

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

示例代码一:

[javascript] view
plaincopy





function ledi(){

alert('ledi1');

};

ledi();

function ledi(){

alert('ledi2');

};

ledi();

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

示例代码二:

[javascript] view
plaincopy





var ledi = function(){alert('ledi1');};

ledi();

ledi = function(){alert('ledi2');};

ledi();

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

示例代码三:

[javascript] view
plaincopy





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

ledi();

ledi = function (){alert('ledi2');};

ledi();

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

示例代码四:

[javascript] view
plaincopy





window.alert(ledi);

function ledi(){

}

//这四行代码分开执行

window.alert(ledi);

var ledi = 123;

以上代码分开执行,可验证,函数预编译会执行,变量赋值则是先分配空间,执行时再赋值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: