《悟透JavaScript》学习札记三之函数的魔力
来源:互联网 发布:小学生出题软件 编辑:程序博客网 时间:2024/05/01 11:58
1.函数声明:
<!--定义式函数声明-->
<script type="text/javascript">
function myfunc(){ alert("Hello definition");};
myfunc();
alert(typeof(myfunc));
</script>
<!--变量式函数声明-->
<script type="text/javascript">
var myfunc = function(){ alert("Hello variable");};
myfunc();
alert(typeof(myfunc));
</script>
2.声明方式差异比较
<!--变量式函数声明-->
<script type="text/javascript">
var myfunc = function(){ alert("Hello variable");};
myfunc(); //第一次调用,输出Hello variable
myfunc = function(){ alert("Yeah variable");};
myfunc(); //第二次调用,输出HeYeah variable
</script>
然而:
<!--定义式函数声明-->
<script type="text/javascript">
function myfunc(){ alert("Hello definition");};
myfunc(); //第一次调用
function myfunc(){ alert("Yeah definition");};
myfunc(); //第二次调用
</script>
两次输出结果均为Yeah definition
原因:JavaScript执行引擎并非一行一行地分析和执行程序,而是一段一段的分析执行的。而且,在同一段程序的分析执行中,定义式的函数语句会被提取出来优先执行,然后再按顺序执行其他语句代码。也就是说,在第一次调用myfunc之前,第一个函数定义的代码逻辑,已被第二个定义语句覆盖了,所以两次执行都是最后一个函数逻辑了。
另附:
// 定义式函数声明
alert(SumDef(1, 2)); // output: 3
function SumDef(num1, num2){
return num1 + num2;
}
// 变量式函数声明
alert(SumVar(2, 3)); // 没有结果,下面也不会执行
var SumVar = function(num1, num2){
return num1 + num2;
}
alert(SumVar(3, 4));
原因: JavaScript解析器在解释代码的时候会首先读取函数声明,使其在执行其他代码之前可以得到访问。而对于变量式函数声明,解析器会把其当做变量赋值语句,从而
alert(SumVar(2, 3)); 时就相当于调用了一个不存在的SumVar函数,导致出错,下面代码也不会执行。
- 《悟透JavaScript》学习札记三之函数的魔力
- 悟透JavaScript之函数的魔力
- 悟透JavaScript-函数的魔力
- 悟透JavaScript - 函数的魔力
- 《悟透javascript》学习笔记:四、函数的魔力
- 研磨JavaScript系列(三):函数的魔力
- 《悟透JavaScript》学习札记五之奇妙的对象
- 悟透JavaScript(李站老师)-函数的魔力
- 《悟透JavaScript》学习札记之标准网页
- 《悟透JavaScript》学习札记一之回归简单
- 《悟透JavaScript》学习札记二之没有类
- 《悟透JavaScript》学习札记六之放下对象
- 《悟透JavaScript》学习札记七之对象素描
- 《悟透JavaScript》学习札记八之构造对象
- 《悟透JavaScript》学习札记九之初看原型
- 《悟透JavaScript》学习札记十之原型扩展
- 《悟透JavaScript》学习札记十一之原型真谛一
- 《悟透JavaScript》学习札记十一之原型真谛二
- jsp留言板源代码
- 在linux中下载iTunesU的课程
- this 关键字
- 谈谈项目经理应具备的素质
- 设计模式-抽象工厂模式
- 《悟透JavaScript》学习札记三之函数的魔力
- redmine与apache结合
- 喵呜的题
- 2011-7-15 讨论会笔记
- linux 内核编译错误总结
- platform_driver_probe与platform_driver_register的区别
- css学习笔记(四)
- 大小端与union
- 今天开始做一个ARM做为USB从设备的驱动