函数:声明和表达式
 
函数,像变量一样,可以在代码的任意地方定义它。
JS 提供了几个方法去定义它们。
     1.函数声明     (Function Declaration)
     2.函数表达式  (Function Expression)
     3.通过调用new Function 返回。
 
语法
     创建一个函数的基本方法是通过一个函数声明。语法如下:
     
function f(arg1, arg2, ...) {
   ... code ...
}
     
     实现起来像这样子:
          
1 function sayHi(name) {
2   alert("Hi, "+name)
3 }
4  
5 sayHi('John')
     
     上面的例子声明了一个带有一个参数name,函数名为sayHi的函数,并且调用了它。
 
返回值
 
     我们用return语句来返回一个值。
     
1 function sum(a, b) {
2   return a+b
3 }
4  
5 var result = sum(2,5)
6 alert(result)
 
     如果函数不返回任何东西,它的结果 会是一个特殊的值,undefined。你可以从下面的代码看到。
 
     
1 function getNothing() {
2   // no return
3 }
4  
5 var result = getNothing()
6  
7 alert(result)
     
     一个空的返回也是一样:
     
1 function getNothing() {
2   return
3 }
4 alert( getNothing() === undefined ) // true
 
局部变量
 
     一个函数可以包括变量,通过var来定义。这些变量被称为局部变量,而且只能在函数内部使用。
     
1 function sum(a, b) {
2   var sum = a + b
3  
4   return sum
5 }
 
函数声明
 
     函数的声明的解析是在预执行(pre-execution)阶段,也就是浏览器准备执行代码的时候。
     
     因此,通过函数声明来定义函数,可以在定义前或后被调用。
     
     下面的代码是可以跑的:
 
     
1 function sayHi(name) {
2   alert("Hi, "+name)
3 }
4  
5 sayHi("John")
 
     换个顺序也可以:
     
     
1 sayHi("John")
2  
3 function sayHi(name) {
4   alert("Hi, "+name)
5 }
 
     一个函数可以在代码任意位置声明。
 
     


比如,我们可能要根据条件来声明不同的函数:

1 sayHi()
2  
3 if (1) {
4   function sayHi() {  alert(1)  }
5 else {
6   function sayHi() {  alert(2)  } // <--
7 }
在写这篇文章的时候(作者本人没有给出他这这篇文章的时间——译者注),尝试在不同浏览器,火狐会抛出异常,其他两个浏览器都会给出结果 2。
 
这是因为声明是在代码执行前解析的。根据规范(p.10.5),后面函数会覆盖前面存在的同名函数。
 
到了执行时期,声明会被忽略。所以if语句没有起作用。
 

  函数表达式

     在JS里面,函数function和number、string一样,是一阶值(原文为:first-class value,有人也译作:‘一等公民’)
     
     只要可以放置变量的地方,都可以放置函数。在那个‘地方’用函数表达式的语法来声明:function (arguments) {}
 
     例如,你可以这样使用变量:
     var f = 5
     也可给f赋值一个函数表达式:
     
1 var f = function(name) {

相关文章: