Javascript模式——函数提升 (笔记)

 

函数提升:

 

对于所有的变量,无论函数体的何处进行声明,都会在后台被后台被提升到函数顶部。而对于函数同样适用,其原因在于函数只是分配给变量的对象。当使用函数声明时,函数定义也被提升,而不仅仅只是函数声明。

 

function foo(){

   alert('global foo');

}

function bar (){

   alert('global bar');

}

function hoistMe(){

   console.log(typeof foo); //function 变量foo以及实现都被提升

   console.log(typeof bar); //undefined  bar变量被提升 函数实现没有被提升

   foo();                  //global foo

   bar();                 //Uncaught TypeError: bar is not a function

   function foo(){

      console.log('global foo');

       }

   var bar =function(){

      console.log('local foo');

       };

}

hoistMe();

//hoistMe()函数中的foo()和bar移动到了顶部,从而覆盖了foo和bar函数

 

 

 

 

                                                                                                                                           

 

   

 

 

 

  

 

 

 

作用域:

javascript中仅存在函数作用域。在函数内部以var 关键字定义的任何变量都是局部变量,对于函数外部是不可见的。如果if条件语句或在for、while循环中,使用var关键字定义一个变量,这并不意味着该变量对于if或for来说是局部变量。它仅对包装函数来说是局部变量,并且如果没有包装函数,它将成为一个全局函数。

//这里for中定义的i是局部变量。作用域仅在part中

function part(){
    for(var i=0;i<10;i++){
       //..........
   }  
}

//这里这里for中定义的i是全部变量。
 
for(var i=0;i<10;i++){
       //..........
   } 

函数命名属性:

function fn(){} //函数声明

var fn=function(){};//函数表达式

var fn=function fn(){};//函数命名表达式

 

在调试器中调试时,name属性是非常有用的,当调试器需要展示函数中的错误时,它可以检测name属性是否存在,并将其作为一个指示符。

name属性也可用于在自身内部递归调用同一个函数。

 

 

posted @ 2016-02-03 09:53  秋虹连宇  阅读(169)  评论(0编辑  收藏  举报