沒有名字的就叫作“匿名函數”,你可以認爲他們是一次性函數。當你只需要用一次某個函數式,他們就特別有用。通過使用匿名函數,沒有必要把函數一直放在內存中,所以使用匿名函數更加有效率。像這個
function(x,y){return x+y}
沒有名字當然不能直接調用,也無從直接調用;最多能只能把它賦值或閉包處理(閉包是什麼下面再講),如:
var sum =function(x,y){return x+y};
alert(sum(1,2));
這時候,與傳統寫法是等價的 function sum(x,y){return x+y}.這樣的寫法讓人感覺更OOP,因爲sum變量就包含了function...這個函數體;
還可以閉包的方式調用該函數:
(functioin(x,y){return x+y})(1,2) //返回值3
代碼很簡潔。注意括號的使用,形式爲(exp)()。這種用法可以稱作 閉包closure。
後面括號的是參數,把這些參數放進fn裏面立即計算,得出一個值 3。這實際上是一個表達式的運算。沒想到fn函數體也可以放進去參與運算^_^(Using function as an expression)!(基本功:表達式Expression,其含義是通過計算後,始終會返回一個值,無論這個表達式有多長)
fn還可以以參數形式傳遞(passing function as argument to other functions)
var main_fn = function(fn,x,y){return fn(x,y)}
var sum = function (x,y){
return x+y;
}
alert(main_fn(sum,1,2)) // result:3
js匿名函數的執行
- (function(){}());
(function(){}());
去掉最外層括號,瀏覽器將會報錯,加上就沒事,該怎麼解釋?
- (function(){})();
(function(){})();
定義一個匿名函數並立即執行。
呵呵,一個富有想象力的寫法
- 1,function(){}();