函数声明和函数表达式虽然都是在声明一个函数,但是二者有区别,解析器对二者的解析并非是一视同仁的。解析器会率先解析读取函数声明,并使其可以在执行任何代码前可用(可以访问);至于函数表达式,则必须等到解析器解析执行到它所在的行,才会被真正解释执行,才可被使用。如下代码所示:
<script type="text/javascript"> alert(add(2,3)); function add(a,b){ return a+b; } </script>
该段代码可以正常执行,因为add(a,b)是一个函数声明,解析器可以在任何地方解析执行这个函数。而下面的代码:
<script type="text/javascript"> alert(2,3); var sum = function(a,b){ return a+b; } </script>
这段代码虽然也有输出,有执行,但并不是正确的执行了预期的功能。因为这段代码是一个函数表达式,必须确保解析器执行到了声明函数的这一行,才能被正确的调用,所以是本段代码是没有被正确执行的。
还有一个小的知识点,就是作为值的函数,如果要访问的是函数的指针,而不是执行函数的话,那么久必须去掉函数后面的那对圆括号。如下代码:
<script type="text/javascript"> function callSomeFunction(someFunction,someArguments){ return someFunction(someArguments); } function add10(num){ return num+=10; } var result1 = callSomeFunction(add10,10); document.write(result1+"<br />"); var result2 = add10(10); document.write(result2+"<br />"); </script>
传递给callSomeFunction的add10。