第一種:具名函數(shù)
function x(input1, input2){
return undefined // 一個(gè)函數(shù)必須有一個(gè)終止的程序驮吱,就是 return掩幢,如果你不寫,那么瀏覽器也會(huì)幫我們加上鸠窗。
}
這里的(input1, input2)是2個(gè)變量苛坚,function是一個(gè)關(guān)鍵字,和 var 的作用是一樣的色难,var 是聲明一個(gè)變量泼舱,function 是聲明一個(gè)函數(shù),那么變量和函數(shù)有什么區(qū)別呢枷莉?
1.變量可以包含7種數(shù)據(jù)類型 (Boolean娇昙、Null、Undefined笤妙、Number冒掌、String、Symbol蹲盘、Object)
2.如果 function x股毫, 那么這個(gè) x 就一定是一個(gè)函數(shù),也就是說(shuō)這是一個(gè)特別的變量召衔, x就是這個(gè)函數(shù)的名字铃诬,我們可以通過(guò)consolo.log(x)給輸出出來(lái)。 我們?cè)瓉?lái)說(shuō)過(guò) consolo.log只接受字符串苍凛,如果不是字符串趣席,則會(huì)自動(dòng)調(diào)用 x.toString()方法來(lái)得到 string
打印出來(lái)的東西 和 return 的東西沒(méi)有任何關(guān)系,不要認(rèn)為打印出來(lái)什么就返回什么4己P恰!
第二種:匿名函數(shù) (沒(méi)有名字且將函數(shù)賦值給一個(gè)變量)
function (input1, input2){
return undefined
}
上述的例子中悠栓,如果單獨(dú)的去寫一個(gè)匿名函數(shù)的話是會(huì)報(bào)錯(cuò)的霉涨,匿名函數(shù)必須賦值給一個(gè)變量才可以按价。
第三種:具名函數(shù)賦值給一個(gè)變量
var x = funciton y(input1, input2){}
那么var x = funciton y(input1, input2){} 和直接聲明一個(gè) funciton y(){} 有什么區(qū)別呢?
第四種:window.Function 函數(shù)對(duì)象(程序員一般不會(huì)采用此方法)
new Function('第一個(gè)參數(shù)', '第二個(gè)參數(shù)', 'return x+y')
Function構(gòu)造函數(shù)接受三個(gè)參數(shù)嵌纲,除了最后一個(gè)參數(shù)是add函數(shù)的“函數(shù)體”俘枫,其他參數(shù)都是add函數(shù)的參數(shù)。
你可以傳遞任意數(shù)量的參數(shù)給Function構(gòu)造函數(shù)逮走,只有最后一個(gè)參數(shù)會(huì)被當(dāng)做函數(shù)體鸠蚪,如果只有一個(gè)參數(shù),該參數(shù)就是函數(shù)體师溅。
“函數(shù)體”部分用字符串表示茅信,字符串是可以拼接的,拼接的過(guò)程中可以加變量
new Function('x', 'y', 'return x+y')
var n = 1
f = new Function('x', 'y', 'return x +' +n+ '+y' )
//等同于 f = new Function('x', 'y', 'return x + y +' +n)
//上面單引號(hào)里面的+表示運(yùn)算+ 外面的+表示拼接墓臭,整個(gè)拼接之后就是 return 1+2+1
//那么 f(1, 2)的值為 4
Function構(gòu)造函數(shù)可以不使用new命令蘸鲸,返回結(jié)果完全一樣×保總的來(lái)說(shuō)酌摇,這種聲明函數(shù)的方式非常不直觀,幾乎無(wú)人使用嗡载。
第五種:箭頭函數(shù)(比較炫酷的)
注意:箭頭函數(shù)一定是匿名的窑多,這個(gè)語(yǔ)法就沒(méi)有給我們寫名字的地方。
f = (x, y)=>{return x+y}
//等號(hào)右邊的是一個(gè)匿名函數(shù)(箭頭函數(shù))
例
sum = (x, y) => { return x+y }
//★★★★如果花括號(hào)內(nèi)只有一句執(zhí)行內(nèi)容
//那么這個(gè)花括號(hào)和 return可以去掉 ,等同于如下:
sum = (x, y) => x+y
//★★★★★如果參數(shù)只有一個(gè)的話洼滚,那么圓括號(hào)也可以不要埂息,如下:
n2=n =>n*n
總結(jié)一下
function f(x, y){return x+y}
f = function{}
f = function x(){}
f = new Function('x', 'y', 'return x+y')
f = (x, y) => x+y