在ECMAScript 中, 函数实际上是对象–Function类型的实例,与其类型一样具有属性和方法。由于函数是对象,因此函数名实际上是一个指向函数的指针,不会与某个函数绑定。定义函数的方法有两种

1:函数声明语法

2:函数表达式

3:使用Function构造函数。Function可以接受任意数量的参数,但随后一个参数始终被看作函数体(不推荐)。


但是在js的解析过程中,使用上述的两种方法定义函数的运行结果却是完全不同的。

1:函数声明语法

在解析器向执行环境加载数时,会率先读取函数声明,并使其在执行任何代码前可用。例如

<pre>console.log(f1());
function f1(){
var n=999;
return n;
}//999</pre>

2:函数表达式

使用函数表达式的方法,必须等到解析器执行到他所在的代码行时才会真正被解释执行。

<pre>console.log(f1());
function f1(){
var n=999;
return n;
}//error</pre>