function函式
function的英文是[功能],[數] 函式;職責;盛大的集會的意思
在js里,就是函式的意思,在Java里叫做方法,
定義函式
function fun(引數){
//函式體
//return可有可無,根據實際要求加或不加
}
使用函式
//函式名()
fun();
ps:在js里,我們的方法可以先呼叫后宣告,也就是呼叫寒素的代碼可以寫在定義函式的前面,
實參、形參
實參:簡單理解就是實際的引數,在呼叫函式的時候傳的
形參:簡單理解就是在定義函式時,用來接收呼叫時傳的值
var n1=123 , n2=456
//呼叫函式
fun(n1 , n2)
//定義函式
function fun( a , b){
a += 100
b += 100
console.log(a , b)
}
console.log(n1 , n2)
//運行結果:223 , 556
//123 , 456
ps:我們可以看出,實參和形參并不是同一個變數
不太嚴謹的引數串列
先看一段代碼:
function fun(a , b , c){
console.log(a*10 , b+10 , c-10)
}
//呼叫
fun(1,2,3)//輸出結果10,12,-7
//這里是沒毛病的,正常輸出
//但是下面這個呼叫呢???
fun(20,2)
fun()
fun(12,32,14,5)
ps:上面的寫法,都不會報錯...如果不信可以自己試試,
- 我們在定義函式的時候,定義了多少個引數,按道理來說,就應該嚴格按照規范傳參,但是沒辦法,js里比較‘寬容’,你傳了多少個引數,就接收多少個引數
- 如果多傳了就無視你多傳的引數,從第一個','前的引數為第一個引數算
- 如果少傳了,沒有傳的那幾個引數,就為undefined,都沒傳那就值都為undefined
return關鍵字
首先,在js里,并沒有規定函式在定義的時候,一定要有回傳值或者回傳值型別這一說法,很活躍的,你想回傳什么結果都可以
其次,如果要回傳結果或者結束函式體,就要用到return關鍵字
- return用于回傳函式的值給呼叫者
- return一旦執行,則立馬結束當前的函式,注意:必須時回傳具體的值才會結束(可以思考一下遞回呼叫)
- return函式中可以有多個,回傳不同條件下的值,比如在switch中,每個case后面可以用return回傳具體的值
arguments
在es5里,arguments是一個物件,用來接收所有的引數,用法和陣列一致;不過目前已被廢棄,有更好的代替它
es6:(推薦使用)
function fun( n1, n2, ...args ){
//args只能接收n2后面的數
//用...接收的就是一個陣列,可以遍歷
}
ps:...后面不一定要寫args,可以自己隨便命名,符合字串規范就行,一般用args表示
關于...args的用法
- args不能放在引數串列的前面
- args有且只有一個
關于函式的耦合問題
先看代碼:
var num = 100
var res = fun(1)
//定義函式
function fun(n){
console.log( num + n )
}
//輸出為101
ps:上面的代碼運行結果沒問題,但是,耦合度很高,因為在函式體內,用全域變數運算,這就很忌諱,如果專案要移植,這些用到的變數就會拖泥帶水的,耦合度高,這在以后的作業中這么干容易被炒魷魚...
注意:如果要使用,傳引數就好了,千萬別使用全域變數
函式名的問題
var f = function fun(){
console.log("my name is rainbow")
}
console.log(f)
ps:我們把一個函式體,賦值給了一個變數,那么這個變數列印出來會怎么樣呢?
結果:并不會報錯,而是直接列印出了整個函式體的內容,我們可以這么想,呼叫函式的時候,我們寫的是fun(),也就是 函式名() 就變成了呼叫了,其實,js里面還真是這么干的,函式名加括號就是呼叫了一次函式,
在這里,大家和我想一個問題,這個方法體賦值給了變數,那這個變數是什么型別呢???
匿名函式
簡單理解就是,你要使用一個函式,但是這個函式沒有名字,這要怎么使用呢,
很簡單,上面不是說了嗎?
- 呼叫函式就是 函式名()
- 而又因為 函式名 = 方法體
- 那么 方法體() = 函式名()
這樣就呼叫了一次函式
var a = 10;
var b = 20;****************
var f = function(){
console.log(n1+n2)
};
f(a,b)//輸出結果30
自執行函式
- 自執行函式就是自己定義自己執行
這個就是匿名函式的應用
(function(){
console.log('this is rainbow !')
})();
例子
var a = 10;
var b = 20;
(function( n1 , n2 ) {
console.log( n2 + n1)
})(a ,b);
//輸出結果為30
ps:
- 自執行函式的函式體必須要用()包起來,建議最后加上分號';'
- 自執行應用場景一般在一些類別庫上
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/249768.html
標籤:其他
上一篇:toFixed()與銀行家舍入
下一篇:微信小程式之高德地圖多點路線規劃
