javascript中函数定义通常有两种方法:
1. 普通的函数定义:
function f1 (){}
2. 变量式函数定义:
var f2 = function(){}
还有一种定义方法是new Function,由于这种方法并不常用,这里就不做解释了。
那这两种定义方法有什么不同呢?难道仅仅只是样子不同而已嘛?当然不是这样,我们来看个具体的例子吧,大家觉得以下代码的执行结果是什么?
if (1 === 1) {
tellAlert();
} else{
function tellAlert(){
alert('hello');
}
}
执行结果是:会提示“hello”
那接下来这段代码呢?
if (1 === 1) {
tellAlert();
} else{
var tellAlert = function (){
alert('hello');
}
}
执行结果是:游览器不会提示“hello”,chrome中的控制台还会报错:
从上例中,我们可以明显看出,两者很大的不同就是执行顺序不同,这是function语句在解析时会发生被提升的情况。也就是说不管function被放置在哪里,它都会被移动到被定义时所在作用域的顶层。这样的后果就是放宽了函数必须先声明后使用的要求。
《javascript语言精粹》中推荐使用的方法是 var f1 = function()。这样能明确表示f1 是一个包含一个函数值的变量。
而nodejs的源码中,定义函数的方法是function f1()。
个人感觉,在控制自己的代码逻辑的基础上,直接用function f1()会更好点,代码会更清楚点。
·