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是不存在的.
虽然这种写法解决了 不符合"先定义后调用" 的问题,但这样的写法不够直观.