定義函數的常見方法:閉包
函數聲明的一個特徵:函數聲明提高;函數
函數聲明如: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