函式表示式在使用前必須先賦值。
// 函式表示式,使用前必須先賦值
var functionname=function(arg0,arg1){}//匿名函式或拉姆達函式
// arguments.callee 是乙個指向正在執行的函式的指標,因此可以用它來實現對函式
// 的遞迴呼叫,
function factorial(num)else
}
console.log(factorial(5));
//在不允許使用arguments.callee的情況下可以使用 函式表示式
var fac=(function f(num)else
});
console.log(fac(5));view code
閉包是指有權訪問另乙個函式作用域的變數的函式。
當某個函式被呼叫時,就會建立乙個執行環境及響應的作用域鏈,然後使用arguments和其他命名引數來初始化函式的活動物件。但在作用域鏈中,外部函式的活動物件始終處於第二位,外部函式的外部函式處於第三位。。。,直至作為作用域鏈終點的全域性執行環境。
後台的每個執行環境會有乙個表示變數的物件---變數物件。全域性變數的物件一直存在,其他函式的變數物件,只在函式執行時存在。無論什麼時候搜尋變數時都會從作用域鏈中搜尋具有相應名字的變數。當函式執行完成後,會將區域性活動物件銷毀。在另乙個函式中定義的函式會將包含函式的活動物件新增到作用域鏈中。
閉包只能取得包含函式中的任何變數的最後乙個值.
關於this物件
在全域性函式中this=window,而當函式作為某個物件的方法呼叫時,this等於那個物件。不過匿名函式的執行環境具有全域性性,因此其this物件通常指向window。但有時候不那麼明顯。
var name="the window";
var object=
}
}
alert(object.getname()());view code
每個函式在呼叫時都會自動獲取兩個特殊的變數:this和arguments。內部函式搜尋這兩個變數時,只會搜尋到其活動物件為止,因此永遠不可能直接訪問外部函式中的這兩個變數。把外部作用域中的this儲存到閉包內能夠訪問的變數裡,就可以讓閉包訪問該物件了。
模仿塊級作用域
用作塊級作用域(私有作用域)的匿名函式語法如下:
(function(){})();
將函式宣告包括在一對圓括號內,表示它實際上是乙個函式表示式。而緊隨其後的另一對圓括號會立即呼叫這個函式。
// alert(object.getname()());
// 模仿塊級作用域
function outputnumbers(count)view codethis.publicmethod=function
()}
缺點:必須使用建構函式模式來達到這個目的。
靜態私有變數
(functionview code() myobject=function
(){};
myobject.prototype.publicmethod=function
()})();
以這種方式建立靜態私有變數會因為使用原型而增進**復用,但每個例項都沒有自己的私有變數。到底是使用例項變數,還是靜態私有變數,最終還是要視你的具體需求而定。
模組模式
模組模式為單例建立私有變數和特權方法。
(), registercomponent:
function
() }
};}();
view code
簡言之,如果必須建立乙個物件並以某些資料對其進行初始化,同時還要公開一些能夠訪問這些私有資料的方法,那麼就可以使用模組模式。以這種模式建立的每個單例都是 object 的例項,因為最終要通過乙個物件字面量來表示它。
增強的模組模式
在返回物件之前加入對其增強的**。這種增強的模組模式適合那些單例必須是某種型別的例項,同時還必須新增某些屬性或方法對其加以增強的情況。
basecomponent = functionview code(){}
()(component)
return
//公共
//return ,
//registercomponent:function()//}
//};
}();
newbasecomponent());
函式表示式
函式定義有以下兩種方式 一種是函式宣告,一種是函式表示式。函式宣告 在執行 之前會先讀取函式宣告,即函式宣告提公升。函式表示式 常用語法形式是常規的變數賦值語句,即建立乙個匿名函式並賦值給乙個變數。函式表示式在使用之前必須賦值,否則會出錯,這點與函式宣告提公升不同。能夠將匿名函式作為其他函式的值進行...
函式表示式
定義函式的方式有兩種 一種是函式宣告,另一種是函式表示式 函式宣告語法格式如下 function functionname arg0,arg1,arg2 關於函式宣告,有乙個重要的特徵就是函式宣告提公升,意思是在執行 之前會先讀取函式宣告 函式表示式語法格式如下 var functionname f...
JS函式表示式
1.遞迴 function digui num else var d digui digui null d 3 改進 用arguments.callee num 1 代替 digui num 1 arguments.callee 是指向引數所在的函式的指標,code如下 function digui...