出处:http://blog.sina.com.cn/s/blog_6e6e7adc01018cu8.html

定义一个函数,可以由好几种方法,其中最常用的就是函数声明和函数表达式,虽然都可以实现定义函数,但他们之间也会有区别。
下面咱们先看函数声明如何定义函数:

一个简单的例子:

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、函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析;
所以当使用函数声明的形式来定义函数时,可将调用语句写在函数声明之前,而函数天达式,这样做的话会报错,调用只能在函数表达式之后。



本文转载:CSDN博客