JavaScript 中函数定义的差异问题

try {
	fun1();
} catch(e) {
	alert(e);
};

try {
	fun2();
} catch(e) {
	alert(e);
};

function fun1() {
	alert("this is fun1.");
}

var fun2 = function() {
	alert("this is fun2.");
}

try {
	fun2();
} catch(e) {
	alert(e);
};

因为这样的写法更有助于区别函数的定义和一般变量的定义.


但这样的写法,

function fun1() {
	alert("this is fun1.");
}

当这个function的语句在解析时会发生被提升的情况.( 加粗部分出自<JavaScript语言精粹>)

这就是意味着,用此方法无论在哪里定义的函数,都会被移动到定义时所在作用域的顶层.

也就是说,在定义的作用域内都可以调用该函数,这就不符合"先定义后调用"的理念.

这样会影响代码可读性和带来一些混乱,所以在编码时更应该注意"先定义后调用".


而下面的代码,则解决了上面所提及的问题.

var fun2 = function() {
	alert("this is fun2.");
}

函数fun2的调用必须在函数的定义之后,不然会抛出错误.

因为这种写法类似于定义一个变量,在定义fun2之前,fun2是不存在的.

虽然这种写法解决了 不符合"先定义后调用" 的问题,但这样的写法不够直观.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值