函數(shù)定義的方式有三種:
- 構(gòu)造函數(shù)的形式
可以將要封裝的代碼以字符串的形式傳遞給Function
構(gòu)造函數(shù)郎汪。
var 函數(shù)名 = new Function("代碼語句...");
不過饵婆,在實際開發(fā)中伍宦,很少使用構(gòu)造函數(shù)的形式來創(chuàng)建一個函數(shù)對象给猾。
- 函數(shù)聲明的形式
function 函數(shù)名([形參1,形參2...形參N]){
語句...
}
函數(shù)聲明定義一個具有指定參數(shù)的函數(shù)丙号。此篇主要講函數(shù)聲明形式創(chuàng)建函數(shù)有關(guān)內(nèi)容先朦。
- 函數(shù)表達式的形式
var 函數(shù)名 = function ([形參1,形參2...形參N]){
語句...
}缰冤;
下面就講講函數(shù)聲明形式定義一個函數(shù)相關(guān)內(nèi)容。
1.描述
函數(shù)聲明創(chuàng)建的函數(shù)是一個 Function 對象喳魏,具有 Function 對象的所有屬性棉浸、方法和行為。
函數(shù)可以被有條件來聲明截酷,也就是說函數(shù)聲明可能出現(xiàn)在一個
if 語句
里涮拗。有的瀏覽器會將這種有條件的聲明看成是無條件的聲明,即是無論條件是true
還是false
迂苛,瀏覽器都會創(chuàng)建函數(shù)三热。因此,它們不應(yīng)該被使用三幻。
默認情況下就漾,函數(shù)的返回值是 undefined
。如果想返回一個其他值念搬,函數(shù)必須通過一個return
語句指定返回值抑堡。
2.有條件的創(chuàng)建函數(shù)
根據(jù)上述描述部分內(nèi)容我們知道函數(shù)聲明可能在if語句
里,但朗徊,這種
聲明方式在不同的瀏覽器里可能有不同的效果首妖。因此,不應(yīng)該在生成環(huán)境代碼中使用這種聲明方式爷恳,應(yīng)該使用函數(shù)表達式來代替有缆。
var hoisted = "fun" in this;
console.log(`"fun" name ${hoisted ? "is" : "is not"} hoisted. typeof fun is ${typeof fun}`);
if (false) {
function fun(){
return 1;
}
}
輸出結(jié)果如下:
- 在Chrome瀏覽器中:
"fun" name is hoisted. typeof fun is undefined
fun
變量名被提升,但是 typeof fun
為undefined
.
- 在Firefox瀏覽器中:
"fun" name is hoisted. typeof fun is undefined
fun
變量名被提升温亲,但是 typeof fun
為undefined
.
- 在Edge瀏覽器中:
"fun" name is not hoisted. typeof fun is undefined
fun
變量名未被提升棚壁,且 typeof fun
為undefined
.
- 在Safari瀏覽器中:
"fun" name is hoisted . typeof fun is function
fun
變量名被提升,且 typeof fun
為function
.
注意:即便上述代碼中if(false)
改為if(true)
栈虚,結(jié)果都是一樣的袖外。代碼如下:
var hoisted = "fun" in this;
console.log(`'fun' name ${hoisted ? "is" : "is not"} hoisted. typeof fun is ${typeof fun}`);
if (true) {
function fun(){
return 1;
}
}
輸出結(jié)果如下:
- 在Chrome瀏覽器中:
"fun" name is hoisted. typeof fun is undefined
fun
變量名被提升,但是 typeof fun
為undefined
.
- 在Firefox瀏覽器中:
"fun" name is hoisted. typeof fun is undefined
fun
變量名被提升魂务,但是 typeof fun
為undefined
.
- 在Edge瀏覽器中:
"fun" name is not hoisted. typeof fun is undefined
fun
變量名未被提升曼验,且 typeof fun
為undefined
.
- 在Safari瀏覽器中:
"fun" name is hoisted . typeof fun is function
fun
變量名被提升,且 typeof fun
為function
.
3.栗子
-
聲明函數(shù)
下面代碼聲明了一個函數(shù)粘姜,該函數(shù)返回了兩個數(shù)值的和鬓照,參數(shù)是加數(shù)a
和加數(shù)b
.
function add(a,b){
return a + b ;
}
-
調(diào)用函數(shù)
封裝到函數(shù)中的代碼不會立即執(zhí)行,函數(shù)中的代碼會在函數(shù)調(diào)用的時候執(zhí)行
語法: 函數(shù)對象();
當調(diào)用函數(shù)時相艇,函數(shù)中封裝的代碼才會被執(zhí)行。
function add(a,b){
return a + b ;
}
add(1,3); //返回值為4
如果你覺得這篇文章對你有幫助纯陨,請轉(zhuǎn)發(fā)點贊支持一下哦坛芽!