之前一只搞不懂这个到底是怎么回事。现在看了卢伊的答案,自己总结一下。 [js] // //方法一 var foo = function(){ //code } //方法二 var function(){ //code } // [/js] 使用第一种方法: [js] // var FUNCTION_NAME = function(){  //code  } // [/js] 为  匿名函数  。使用匿名函数,编译以后变量声明FUNCTION_NAME会”被提前”,但是他的 赋值 (也就是code)并不会被提前。只有在调用的时候才会被初始化。   如果使用第二种方法: [js] // function FUNCTION_NAME(){//code} // [/js] 这种方式,编译后函数声明和他的赋值都回被提前。 整个函数声明过程在整个执行前就完成了。所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以。         参考: http://www.zhihu.com/question/19878052 http://www.bootcss.com/article/variable-and-function-hoisting-in-javascript/ http://bonsaiden.github.io/JavaScript-Garden/zh/#function    js秘密花园