定义一个函数,可以由好几种方法,其中最常用的就是函数声明和函数表达式,虽然都可以实现定义函数,但他们之间也会有区别。
下面咱们先看函数声明如何定义函数:
一个简单的例子:
function count(a,b){ return a+b; }
在这里,count作为函数名,其实就是一个指向了函数对象的指针。
如果用函数表达式来定义同样的函数:===>也就是,有“=”赋值的,就是函数表达式
var count = function(a,b){ return a+b;};
这里的count做为变量,也同样指向了函数对象。
因此在后续的调用中,效果是没有差别的;但是他们的区别在于解析器对这两种定义读取的顺序不同;
解析器会事先读取函数声明,并在执行后续的代码之前使之可以使用,即使你把函数声明放在代码的末端;
而对于函数表达式,解析器只有在读到函数表达式所在那行的时候才执行;
可以看下面代码的比较:
函数声明(顺利执行):
alert(count(10,10)); function count(a,b) { return a+b; }
函数表达式(报错):
alert(count(10,10)) var count = function(a,b){ return a+b; };
从这里就能看出两者的区别了。
【个人总结】
1、函数声明,js解析器会优先读取,确保在所有代码执行之前声明(提前声明)已经被解析;
2、函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析;
所以当使用函数声明的形式来定义函数时,可将调用语句写在函数声明之前,而函数天达式,这样做的话会报错,调用只能在函数表达式之后。