js函式 函式自呼叫 返回函式的函式 (閉包)
轉 http://blog.sina.com.cn/s/blog_8f9d58d50102w331.html
什麼是函式:
①函式是重複計算使之簡化,修改常量方便。
②函式是數學中的抽象概念,我們看到一個符號就知道其中的計算,
100
∑n
n=1
以上這個符號代表1到100的相加,看到它理解成加和,而不是很簡單的加法運算;我們可以省了複雜的計算過程,直接思考高層次的邏輯。
函式是最基本的一種程式碼抽象方式。
首先需要清楚的瞭解一點:
所有函式都是物件。
以下函式中
obj()函式是一個函式物件,而函式名
obj可以視為指向該函式的變數。
比如我們定義一個函式可以這樣寫:
function obj(a){
<wbr>
console.log(a)
};
還可以這樣寫:
var obj= function(a){
console.log(a)
}
函式內部的語句在執行時,一旦執行到
return時,函式執行完畢,並將結果返回。如果沒有return語句,函式執行完畢會返回結果,只是結果是undefined。
小心你的return語句:
js語言有一個在行末自動新增分號機制,
functionobj(a){
<wbr>
return
<wbr>
<wbr>
(a+"name")
};
與
functionobj(a){
<wbr>
return
<wbr>
<wbr>
(a+"name")
};
返回的結果是不一樣的。
函式自呼叫:
所謂的函式自呼叫,就是在定義函式的時候直接呼叫。
比如:
var result =function (x){return x + 1;}(3);
這段程式碼的本質是:
var plusOne =function (x){
return x + 1;
};
var result = plusOne(3);
這樣寫就清楚了,我們先定義一個函式plusOne ,然後呼叫它,並提供實參3.
而上面的自呼叫的寫法就是把這兩件事放在一起完成了。
通過function (x){return x +1;}這一段程式碼,相當於寫了一個函式字面量(字面量詳見物件導向的三種建立方式),
而後面緊接著的(3)就是給這個函式字面量一個引數來呼叫它。換句話說,所有函式
類物件,不論是一個現場定義的匿名函式,還是一個之前定義的有名字的函式,他們不加
括號的時候都代表了這個函式物件本身,而加括號代表了呼叫這個函式,也就是這個函式
的return物件。
返回函式的函式:
剛才的例子:
var plusOne =function (x){
return x + 1;
};
var result = plusOne(3);
這裡的函式plusOne返回引數+1以後的值。
實際上一個函式是可以返回任何物件的,我們可以給plusOne再套一層:
plusOne是第一個真正被呼叫的函式,通過plusOne加括號,我們可以得到了
plusOne函式return的物件,也就是realFunction函式,再通過plusOne()(3)
我們得到了realFunction這個函式傳了引數3以後的return值,也就是4。(注意
對於最後一行來說,realFunction這個名字已經不存在了);
我們可以把x放在外面:
這裡我們相當於先把3告訴plusOne函式,然後由realFunction負責把plusOne活得的引數
加一,並返回。所以我們需要在第一個括號裡面傳3,第二個括號為空。
利用上面所說的返回函式的函式。可以做一些有趣的事情。
相關文章
- JS函式表示式——函式遞迴、閉包JS函式遞迴
- JS閉包函式和回撥函式JS函式
- js函式閉包JS函式
- 閉包函式(匿名函式)的理解函式
- JS閉包函式概念JS函式
- 回撥函式 與 函式閉包函式
- 函式閉包函式
- 閉包函式函式
- JS中函式內套函式的呼叫JS函式
- 函式物件、裝飾器、閉包函式函式物件
- Python 返回函式+匿名函式Python函式
- JavaScript進階系列01,函式的宣告,函式引數,函式閉包JavaScript函式
- python函式程式設計 返回函式 匿名函式 裝飾器 偏函式Python函式程式設計
- go 閉包函式Go函式
- C++ 返回函式指標的函式C++函式指標
- (譯) 函式式 JS #2: 函式!函式JS
- JavaScript 匿名函式 閉包JavaScript函式
- js中的函式巢狀和閉包JS函式巢狀
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- swift1.2語言函式和閉包函式介紹Swift函式
- 理解Python函式閉包Python函式
- 學習javaScript必知必會(1)~js介紹、函式、匿名函式、自呼叫函式、不定長引數JavaScriptJS函式
- PostgreSQL函式裡呼叫函式(SETOF + RETURN QUERY)SQL函式
- 深入理解 函式、匿名函式、自執行匿名函式函式
- python中的閉包函式Python函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 【函式式 Swift】函式式思想函式Swift
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- 子函式呼叫函式
- 函式呼叫棧函式
- 外部函式的呼叫函式
- JS函式JS函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- JS的五種函式呼叫方式JS函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- Python 閉包函式說明Python函式
- JavaScript4:函式和閉包JavaScript函式