函數聲明和函數表達式

定義函數的常見方法:閉包

函數聲明的一個特徵:函數聲明提高;函數

函數聲明如:this

function fName(){

}

函數表達式也是常見的建立函數的方法:spa

var fName = function ( ) { 

}

函數表達式的另外一種聲明的方法:
(function f(){}); //()是一組分組操做符,它的內部只能包含表達式

注意:函數表達式與其餘表達式同樣,在使用前必定要進行賦值操做。在把函數當作值來使用的狀況下,均可以使用匿名函數,指針

可是這不是匿名函數的惟一用途。code

建立函數也能夠再另外一個函數中返回一個函數對象

function create ( ){ 
              
                  ..........
              
                 return function( ){
                           ........
                 };    
      
}              

函數遞歸:一個函數經過調用自身的狀況blog

funtion fName (){


            if(num <= 1){
                    return 1;
            }else{
                    return num * arguments.callee( num -1 );//arguments.callee是一個指向當前函數的一個指針 
            }

}        

閉包:是指有權訪問另外一個函數做用域中的變量的函數,閉包會攜帶包含它的函數的做用域變量對象。遞歸

一個閉包的例子:作用域

 1 var name = " 閉包";
 2                 
 3     var object = {
 4                     
 5         name : "JS",
 6                     
 7         getName : function(){
 8                     
 9             //這是一個閉包
10             return function(){
11                     return this.name;
12             };
13                         
14     }
15                         
16 };

由上面的例子談下關於閉包的this對象,閉包的this對象通常狀況下指向的是window;

 1 var name = " 閉包";
 2 
 3 var object = {
 4     
 5     name : "JS",
 6     
 7     getName : function(){
 8     
 9             //這是一個閉包
10             return function(){
11                 return this.name;
12             };
13         
14     }
15         
16 };
17 
18 console.log(object.getName()()); //輸出閉包 this指向 window
 1 var name = " 閉包";
 2 
 3 var object = {
 4     
 5     name : "JS",
 6     
 7     getName : function(){
 8     
 9             //把包含函數的this引用複製給變量,在閉包中調用,改變閉包的this引用
10             
11             var _this = this;
12             
13             //這是一個閉包
14             return function(){
15                 return _this.name;
16             };
17         
18     }
19         
20 };
21 
22 console.log(object.getName()()); //輸出JS this指向 object
相關文章
相關標籤/搜索