第一種:具名函數(shù)
function x(input1, input2){
return undefined // 一個函數(shù)必須有一個終止的程序,就是 return,如果你不寫,那么瀏覽器也會幫我們加上。
}
這里的(input1, input2)是2個變量,function是一個關(guān)鍵字,和 var 的作用是一樣的,var 是聲明一個變量,function 是聲明一個函數(shù),那么變量和函數(shù)有什么區(qū)別呢?
1.變量可以包含7種數(shù)據(jù)類型 (Boolean、Null、Undefined、Number、String、Symbol、Object)
2.如果 function x, 那么這個 x 就一定是一個函數(shù),也就是說這是一個特別的變量, x就是這個函數(shù)的名字,我們可以通過consolo.log(x)給輸出出來。 我們原來說過 consolo.log只接受字符串,如果不是字符串,則會自動調(diào)用 x.toString()方法來得到 string
打印出來的東西 和 return 的東西沒有任何關(guān)系,不要認(rèn)為打印出來什么就返回什么!!!
第二種:匿名函數(shù) (沒有名字且將函數(shù)賦值給一個變量)
function (input1, input2){
return undefined
}
上述的例子中,如果單獨的去寫一個匿名函數(shù)的話是會報錯的,匿名函數(shù)必須賦值給一個變量才可以。
第三種:具名函數(shù)賦值給一個變量
var x = funciton y(input1, input2){}
那么var x = funciton y(input1, input2){} 和直接聲明一個 funciton y(){} 有什么區(qū)別呢?
第四種:window.Function 函數(shù)對象(程序員一般不會采用此方法)
new Function('第一個參數(shù)', '第二個參數(shù)', 'return x+y')
Function構(gòu)造函數(shù)接受三個參數(shù),除了最后一個參數(shù)是add函數(shù)的“函數(shù)體”,其他參數(shù)都是add函數(shù)的參數(shù)。
你可以傳遞任意數(shù)量的參數(shù)給Function構(gòu)造函數(shù),只有最后一個參數(shù)會被當(dāng)做函數(shù)體,如果只有一個參數(shù),該參數(shù)就是函數(shù)體。
“函數(shù)體”部分用字符串表示,字符串是可以拼接的,拼接的過程中可以加變量
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)
//上面單引號里面的+表示運算+ 外面的+表示拼接,整個拼接之后就是 return 1+2+1
//那么 f(1, 2)的值為 4
Function構(gòu)造函數(shù)可以不使用new命令,返回結(jié)果完全一樣。總的來說,這種聲明函數(shù)的方式非常不直觀,幾乎無人使用。
第五種:箭頭函數(shù)(比較炫酷的)
注意:箭頭函數(shù)一定是匿名的,這個語法就沒有給我們寫名字的地方。
f = (x, y)=>{return x+y}
//等號右邊的是一個匿名函數(shù)(箭頭函數(shù))
例
sum = (x, y) => { return x+y }
//★★★★如果花括號內(nèi)只有一句執(zhí)行內(nèi)容
//那么這個花括號和 return可以去掉 ,等同于如下:
sum = (x, y) => x+y
//★★★★★如果參數(shù)只有一個的話,那么圓括號也可以不要,如下:
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