实例讲解js中的预编译
2016-07-12 10:59
399 查看
js作为一本脚本语言,可以不经过编译直接运行,但遇到预编译的问题,尤其是变量或函数同名时,这点知识就尤其必要了。为了更好地了解js语言背后的运行机理。笔者采用实例化的方式讲解我理解的预编译。
理解预编译首先要弄清楚两种概念:函数声明和变量赋值。
[javascript] view
plain copy
function ledi(){ }//函数声明
这种形式的写法是函数声明,即声明一个函数,脚本在执行之前会做预编译处理。
[javascript] view
plain copy
var ledi= function(){ }//变量赋值
这种写法是变量赋值,函数在js语言里也是一种数据,匿名函数作为变量赋值给定义的变量。这种形式在预编译处理阶段,只会给变量ledi分配一个内存空间,不会做初始化。初始化过程中会在执行时执行。
好了,弄清楚以上概念,上实例。实例参考(点击此处)。原作者只详细解释了前两个实例,而笔者看来,接着的两个也非常重要,那么笔者就甄别出代表性来讲解。
示例代码一:
[javascript] view
plain copy
function ledi(){
alert('ledi1');
};
ledi();
function ledi(){
alert('ledi2');
};
ledi();
这段代码,首先判断两个都属于函数声明。都会在预编译阶段处理,而函数名相同,会按后定义的来定义函数,在执行阶段只会看到后定义的函数结果,也就不难理解了。
示例代码二:
[javascript] view
plain copy
var ledi = function(){alert('ledi1');};
ledi();
ledi = function(){alert('ledi2');};
ledi();
这段代码,首先判断两种都属于变量赋值。在预编译阶段,两个变量名一样,分配一个内存空间存放变量ledi内容。当代码执行时,按照顺序执行和赋值,会先后得到两种结果。
示例代码三:
[javascript] view
plain copy
function ledi(){alert('ledi1');};
ledi();
ledi = function (){alert('ledi2');};
ledi();
这段代码,首先判断,前一种属于函数声明,后一种属于变量赋值。预编译处理完,首先执行第二行,实际上是第一行的内容,第三行相当于将ledi变量重新赋值即初始化,重新赋值后,第四行执行第三行的函数。
示例代码四:
[javascript] view
plain copy
window.alert(ledi);
function ledi(){
}
//这四行代码分开执行
window.alert(ledi);
var ledi = 123;
以上代码分开执行,可验证,函数预编译会执行,变量赋值则是先分配空间,执行时再赋值。
理解预编译首先要弄清楚两种概念:函数声明和变量赋值。
[javascript] view
plain copy
function ledi(){ }//函数声明
这种形式的写法是函数声明,即声明一个函数,脚本在执行之前会做预编译处理。
[javascript] view
plain copy
var ledi= function(){ }//变量赋值
这种写法是变量赋值,函数在js语言里也是一种数据,匿名函数作为变量赋值给定义的变量。这种形式在预编译处理阶段,只会给变量ledi分配一个内存空间,不会做初始化。初始化过程中会在执行时执行。
好了,弄清楚以上概念,上实例。实例参考(点击此处)。原作者只详细解释了前两个实例,而笔者看来,接着的两个也非常重要,那么笔者就甄别出代表性来讲解。
示例代码一:
[javascript] view
plain copy
function ledi(){
alert('ledi1');
};
ledi();
function ledi(){
alert('ledi2');
};
ledi();
这段代码,首先判断两个都属于函数声明。都会在预编译阶段处理,而函数名相同,会按后定义的来定义函数,在执行阶段只会看到后定义的函数结果,也就不难理解了。
示例代码二:
[javascript] view
plain copy
var ledi = function(){alert('ledi1');};
ledi();
ledi = function(){alert('ledi2');};
ledi();
这段代码,首先判断两种都属于变量赋值。在预编译阶段,两个变量名一样,分配一个内存空间存放变量ledi内容。当代码执行时,按照顺序执行和赋值,会先后得到两种结果。
示例代码三:
[javascript] view
plain copy
function ledi(){alert('ledi1');};
ledi();
ledi = function (){alert('ledi2');};
ledi();
这段代码,首先判断,前一种属于函数声明,后一种属于变量赋值。预编译处理完,首先执行第二行,实际上是第一行的内容,第三行相当于将ledi变量重新赋值即初始化,重新赋值后,第四行执行第三行的函数。
示例代码四:
[javascript] view
plain copy
window.alert(ledi);
function ledi(){
}
//这四行代码分开执行
window.alert(ledi);
var ledi = 123;
以上代码分开执行,可验证,函数预编译会执行,变量赋值则是先分配空间,执行时再赋值。
相关文章推荐
- c/c++/MFC 调用 js 函数代码
- JavaScript中的事件委托及好处
- html5常用的js简介一
- js闭包
- 原生js实现class的添加和删除简单代码
- JSP概述
- javascript运行过程中的“预编译阶段”和“执行阶段”
- JavaScript动态添加事件之事件委托
- html+js实现简单的计算器代码(加减乘除)
- JavaScript运行过程中的“预编译阶段”和“执行阶段”
- Js中 onload事件
- JavaScript 回调(callback)函数
- Javascript iframe交互并兼容各种浏览器的解决方法
- javascript加减乘除的简单实例
- JavaScript中new和this
- zepto源码研究 - zepto.js - 5(dom属性管理)
- 深入javascript——构造函数和原型对象
- 浅谈javascript中的加减时间
- JS和JSP的区别
- 项目之——利用json实现序列化与反序列化