JS函數(shù)

函數(shù)對任何語言來說都應(yīng)該是核心的概念。函數(shù)的主要作用是封裝任意多條語句了,然后在我們需要的時(shí)候調(diào)用執(zhí)行流济。

聲明函數(shù)

使用function來聲明函數(shù)锐锣,后面跟隨一組參數(shù)。語法如下:

function fun(argments1,argments2){
    statement;
}

下面是一個(gè)示例:

function hi(name,message){
    console.log("hello,"+name+","+message);
}
hi("咸魚","一條正在學(xué)習(xí)前端的咸魚")//調(diào)用前面定義的函數(shù) 結(jié)果為:"hello,咸魚,一條正在學(xué)習(xí)前端的咸魚"

調(diào)用可以通過函數(shù)名加括號绳瘟,在括號能填上參數(shù)雕憔,有多個(gè)參數(shù)使用,逗號隔開;

也可以通過函數(shù)表達(dá)式來創(chuàng)建函數(shù)

var printName = function(name,message){
    console.log("hello,"+name+","+message);
}
printName("小明",".")

var一個(gè)變量糖声,然后給這個(gè)變量賦值一個(gè)函數(shù)表達(dá)式;

函數(shù)有一個(gè)很重要作用就是復(fù)用性斤彼,例如我們有一個(gè)特定的功能需要三句語句來實(shí)現(xiàn),那么每次來實(shí)現(xiàn)這個(gè)功能時(shí)都要復(fù)制這三個(gè)語句就顯得很麻煩姨丈,所以我們可以把這些語句打包成一個(gè)函數(shù)畅卓,再需要實(shí)現(xiàn)這個(gè)功能的時(shí)候直接調(diào)用一下函數(shù)就可以了。

返回值

在很多情況下我們使用函數(shù)其實(shí)是需要函數(shù)的返回值蟋恬,函數(shù)的默認(rèn)返回值是undefined翁潘,但是我們可以通過return語句加上需要返回的值來實(shí)現(xiàn)返回值,下面是一個(gè)例子:

function sum(num1,num2){
    return num1 + num2;
}
var num = sum(1,5);
console.log(sum);//6

上面這個(gè)例子中使用return設(shè)置返回值為num1+num2然后我們把sum()調(diào)用并把值賦給了變量num

不過我們需要注意一下歼争,但函數(shù)執(zhí)行return語句后就會(huì)立即停止并退出拜马,后面的語句不會(huì)繼續(xù)執(zhí)行:

function sum(num1,num2){
    return num1 + num2;
    console.log("num1");
}

console.log("num1")將不會(huì)被執(zhí)行

參數(shù)

JavaScript函數(shù)的參數(shù)可以傳遞任意數(shù)量的參數(shù),參數(shù)可以是任何數(shù)據(jù)類型沐绒。所以被傳遞的參數(shù)都會(huì)被保存在arguments中俩莽,arguments是一個(gè)類數(shù)組對象。

arguments是一個(gè)類數(shù)組對象乔遮,所以會(huì)擁有數(shù)組的方法和特性

因?yàn)楹瘮?shù)其實(shí)是通過arguments來訪問實(shí)參(在調(diào)用時(shí)傳遞給函數(shù)的參數(shù))的扮超,所以形參(聲明函數(shù)時(shí)命名的參數(shù))只是為了讓我們使用參數(shù)更方便而已。

function message(){
    console.log("姓名:"+arguments[0]+","+"年齡:"+ arguments[1]);
}
message("咸魚","20歲")//結(jié)果:姓名:咸魚,年齡:20歲

上面這個(gè)例子并沒有在聲明的時(shí)候定義形參蹋肮。但可以通過arguments[0] arguments[1]來獲得實(shí)際參數(shù)

由于傳遞給函數(shù)的參數(shù)是不限制個(gè)數(shù)和類型的出刷,所以有些時(shí)候我們得先得知傳遞進(jìn)來的參數(shù)個(gè)數(shù)和類型再對應(yīng)情況進(jìn)行特定的操作:

    function doAdd(){
        if(arguments.lenght == 1){
            console.log(arguments[0] + 10);
        }else if(arguments.lenght == 2){
            console.log(arguments[0] + arguments[1])
        }
    }
    doAdd(10);//10
    doAdd(20,50);//70;

    function message(){
        for(var i = 0;i< arguments.length;i++){
            if(typeof(arguments[i]) === "string"){
                var name = arguments[i];
            }else if(typeof(arguments[i]) === "number"){
                var phoneNunber = arguments[i];
            }
        }
        console.log("名字:"+ name);
        console.log("電話號碼:" + phoneNunber);
    }
    message(10086,"咸魚");

沒有重載

重載是很多面向?qū)ο笳Z言實(shí)現(xiàn)多態(tài)的手段之一,在靜態(tài)語言中確定一個(gè)函數(shù)的手段是靠方法簽名——函數(shù)名+參數(shù)列表坯辩,也就是說相同名字的函數(shù)參數(shù)個(gè)數(shù)不同或者順序不同都被認(rèn)為是不同的函數(shù)馁龟,稱為函數(shù)重載

在JavaScript中沒有函數(shù)重載的概念,函數(shù)通過名字確定唯一性漆魔,參數(shù)不同也被認(rèn)為是相同的函數(shù)坷檩,后面的覆蓋前面的,這是不是意味著JavaScript不能通過重載功能實(shí)現(xiàn)一個(gè)函數(shù)改抡,參數(shù)不同功能不同呢矢炼?

在JavaScript中,函數(shù)調(diào)用沒必要把所有參數(shù)都傳入阿纤,只要你函數(shù)體內(nèi)做好處理就行裸删,但前提是傳的參數(shù)永遠(yuǎn)被當(dāng)做前幾個(gè)

function printPeopleInfo(name, age, sex){
    if(name){
        console.log(name);
    }

    if(age){
        console.log(age);
    }

    if(sex){
        console.log(sex);
    }
}


printPeopleInfo('hunger', 3);
printPeopleInfo('hunger', 3, 'male');

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市阵赠,隨后出現(xiàn)的幾起案子涯塔,更是在濱河造成了極大的恐慌,老刑警劉巖清蚀,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匕荸,死亡現(xiàn)場離奇詭異,居然都是意外死亡枷邪,警方通過查閱死者的電腦和手機(jī)榛搔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來东揣,“玉大人践惑,你說我怎么就攤上這事∷晃裕” “怎么了尔觉?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長芥吟。 經(jīng)常有香客問我侦铜,道長,這世上最難降的妖魔是什么钟鸵? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任钉稍,我火速辦了婚禮,結(jié)果婚禮上棺耍,老公的妹妹穿的比我還像新娘贡未。我一直安慰自己,他們只是感情好蒙袍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布俊卤。 她就那樣靜靜地躺著,像睡著了一般左敌。 火紅的嫁衣襯著肌膚如雪瘾蛋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天矫限,我揣著相機(jī)與錄音哺哼,去河邊找鬼。 笑死叼风,一個(gè)胖子當(dāng)著我的面吹牛取董,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播无宿,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼茵汰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孽鸡?” 一聲冷哼從身側(cè)響起蹂午,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤栏豺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后豆胸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奥洼,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年晚胡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灵奖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡估盘,死狀恐怖瓷患,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遣妥,我是刑警寧澤擅编,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站燥透,受9級特大地震影響沙咏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜班套,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一肢藐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吱韭,春花似錦吆豹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猿规,卻和暖如春衷快,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姨俩。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工蘸拔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人环葵。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓调窍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親张遭。 傳聞我的和親對象是個(gè)殘疾皇子邓萨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 在js中,函數(shù)本身屬于對象的一種,因此可以定義缔恳、賦值宝剖,作為對象的屬性或者成為其他函數(shù)的參數(shù)。函數(shù)名只是函數(shù)這個(gè)對象...
    bjhu電net閱讀 542評論 0 5
  • 函數(shù)是一段可以反復(fù)調(diào)用的代碼塊歉甚。函數(shù)還能接受輸入的參數(shù)诈闺,不同的參數(shù)會(huì)返回不同的值。 概述 函數(shù)的聲明 JavaSc...
    oWSQo閱讀 1,262評論 0 4
  • 函數(shù)是一段JS代碼铃芦,它只定義一次,但可能被執(zhí)行或調(diào)用任意次襟雷。你可能已經(jīng)從諸如子例程(subroutine)或過程(...
    JunChow520閱讀 573評論 0 0
  • 轉(zhuǎn)場 剪輯的五種主要類型 本章小結(jié)
    April1閱讀 802評論 0 1
  • 凱恩是一位優(yōu)秀的職業(yè)拳擊運(yùn)動(dòng)員刃滓,他的身手敏捷,反應(yīng)迅速耸弄,以快著稱咧虎,能以快速而連續(xù)的拳法將對手打倒在地。凱恩...
    康飛格閱讀 262評論 0 0