七板祝、JavaScript函數(shù)(function)

函數(shù)就是包裹在大括號中的代碼塊宫静,前面使用了關(guān)鍵詞 function:

一、函數(shù)的聲明

函數(shù)的聲明

我們聲明一個求數(shù)字立方的函數(shù)券时,函數(shù)在定義之后孤里,并不會執(zhí)行里面的內(nèi)容,只有在函數(shù)進(jìn)行調(diào)用的時候橘洞,才會執(zhí)行捌袜。

    // 定義一個求一個數(shù)字的立方的函數(shù),并調(diào)用
    function cube(a) {
        return a * a * a;
    }
    var res = cube(3);

1炸枣、函數(shù)表達(dá)式

函數(shù)表達(dá)式虏等,即用變量保存匿名函數(shù)弄唧。上面的式子就是一個函數(shù)表達(dá)式,其中從function后面一直到反大括號包裹的內(nèi)容稱為函數(shù)體霍衫,cube被稱之為函數(shù)名候引,a就是函數(shù)的參數(shù),return后面的內(nèi)容稱之為返回值敦跌。我們只要調(diào)用上面的函數(shù)就可以求出任何一個數(shù)的立方澄干。

二、函數(shù)的參數(shù)和返回值

1峰髓、函數(shù)的參數(shù)傻寂。

觀察上面的函數(shù)表達(dá)式我們會發(fā)現(xiàn)函數(shù)名括號內(nèi)有一個a息尺,這個a就是稱之為函數(shù)的參數(shù)携兵。參數(shù)類型分為兩種:一種叫顯示參數(shù)也叫形參,是我們在定義的時候?qū)懙膮?shù)搂誉,如上面的a即為形參徐紧;另一種叫隱藏參數(shù)也叫實參,是函數(shù)在調(diào)用的時候用的值炭懊,如上面函數(shù)調(diào)用時函數(shù)名后面括號內(nèi)的3即為實參并级。
函數(shù)的參數(shù)一般寫在函數(shù)名后面的小括號內(nèi),如果不寫參數(shù)默認(rèn)是undefined侮腹,函數(shù)的參數(shù)可以是一個嘲碧,也可以是多個,當(dāng)我們不知道到底有多少個參數(shù)的時候可以使用arguments 關(guān)鍵字父阻,它表示函數(shù)中所有參數(shù)組成的數(shù)組愈涩。

2、函數(shù)的返回值(return)加矛。

另外我們查看上面的函數(shù)表達(dá)使會發(fā)現(xiàn)有一個return關(guān)鍵字后面跟著a ×a × a履婉,這就是函數(shù)的返回值。我們將參數(shù)a傳入函數(shù)內(nèi)斟览,再返回三個a的乘積毁腿,函數(shù)調(diào)用時我們就可以通過參數(shù)返回我們想要的結(jié)果。所以有時苛茂,我們會希望函數(shù)將值返回調(diào)用它的地方已烤。通過使用 return 語句就可以實現(xiàn)。在使用 return 語句時妓羊,return 語句后的代碼都不會被執(zhí)行草戈,并返回指定的值。函數(shù)調(diào)用將被返回值取代侍瑟,當(dāng)然也不是所有的函數(shù)都需要返回值唐片,我們可以根據(jù)需求選擇是否添加返回值丙猬。

    function fun(a) {
        console.log(a);
    }
    fun('我是一個沒有返回值的函數(shù)')

    // 函數(shù)有多個參數(shù)
    function func5(a, b) {
        var res = a + b;
        return res;
    }
    var res3 = func5(12, 34);
    console.log(res3);

    // 函數(shù)內(nèi)部使用 arguments 關(guān)鍵字
    function func6() {
        // 求出所有參數(shù)的和,并返回
        var res = 0;
        for (var i = 0; i < arguments.length; i++) {
            res += arguments[i];
        }
        return res;
    }
    console.log(func6(1, 2, 3, 4, 5, 6));
代碼執(zhí)行效果

三费韭、函數(shù)的調(diào)用

1茧球、函數(shù)的調(diào)用方式

聲明函數(shù)后如果沒有調(diào)用,函數(shù)表達(dá)式里面的代碼是不會執(zhí)行的函數(shù)的調(diào)用有兩種方法:一種是直接編寫函數(shù)名后面緊跟小括號星持,如上面我們求立方的函數(shù)我們只用這么寫cube(3)抢埋,即可調(diào)用求出3的立方;第二種是直接調(diào)用也叫自調(diào)用函數(shù)督暂,其語法就是寫兩個小括號揪垄,我們把函數(shù)寫在第一個小括號內(nèi),函數(shù)運行時它會直接運行函數(shù)里面的代碼逻翁。

    (function () {
        console.log('我是一個自調(diào)用函數(shù)');
    })();


    (function test() {
        console.log('我是另外一個自調(diào)用函數(shù)');
    })();

    // 自調(diào)用函數(shù)特點:函數(shù)自己執(zhí)行饥努,不需要進(jìn)行調(diào)用


    // 自調(diào)用函數(shù),如果有參數(shù)會怎么樣八回?
    (function (a, b) {
        console.log(a, b);
    })(12, 35);
代碼執(zhí)行效果

2酷愧、匿名函數(shù)

上面的函數(shù)就是一個自調(diào)用函數(shù),我們會發(fā)現(xiàn)上面的函數(shù)沒有函數(shù)名缠诅,像這種函數(shù)就被稱之為匿名函數(shù)溶浴,我們當(dāng)然也可以給他加上函數(shù)名,但是這并沒有什么卵用管引。注意給它的參數(shù)不是寫在function后面的小括號內(nèi)士败,而是寫在函數(shù)體后面的小括號中。

3褥伴、函數(shù)的調(diào)用順序

我們在聲明變量的時候會在變量前面加一個var關(guān)鍵字谅将,我們在聲明函數(shù)的時候也可以聲明一個變量來接收函數(shù)表達(dá)式。我們都知道變量在聲明之前調(diào)用會報錯顯示undefined噩翠,如果函數(shù)在聲明之前調(diào)用會不會報錯呢戏自,我們可以看以下代碼:

    fun(10)
    function fun(a) {
        console.log(a);
    }

    add(2,4);
    var add = function (a, b) {
        return console.log(a+b);
    }

代碼執(zhí)行效果
    fun(10)
    function fun(a) {
        console.log(a);
    }


    var add = function (a, b) {
        return console.log(a+b);
    }
    add(2,4);

Paste_Image.png

從上面的代碼我們可以看出,當(dāng)我們用變量接收函數(shù)表達(dá)式的時候只能在函數(shù)聲明后調(diào)用伤锚;當(dāng)我們不用變量接收函數(shù)表達(dá)式的時候擅笔,即使是在函數(shù)聲明之前我們也可以調(diào)用,一定要注意二者之間的區(qū)別屯援。

四猛们、函數(shù)的封裝和閉包

JavaScript允許在函數(shù)內(nèi)部嵌套函數(shù)---即函數(shù)定義和函數(shù)表達(dá) 式位于另一個函數(shù)的函數(shù)體內(nèi)。而且狞洋,這些內(nèi)部函數(shù)可以訪問它們所在的外部函數(shù)中聲明的所有局部變量弯淘、參數(shù)和聲明的其他內(nèi)部函數(shù)。當(dāng)其中一個這樣的內(nèi)部函數(shù)在包含它們的外部函數(shù)之外被調(diào)用時吉懊,就會形成閉包庐橙,閉包主要就是防止變量污染假勿,下面這段代碼就是一個簡單的閉包。

    var add = (function(){
        var count = 0;
        return function () {
            count ++;
            console.log(count);
        }
    })()
    add();

函數(shù)封裝就是將一段實現(xiàn)同一個效果的代碼放在一個函數(shù)表達(dá)式內(nèi)态鳖,這樣方便多次調(diào)用也可以防止變量污染转培,比如我們想要取一定范圍內(nèi)的隨機(jī)數(shù),就可以封裝一個函數(shù)浆竭,代碼如下:

     //封裝涵數(shù)獲取隨機(jī)數(shù)
    function random (min, max) {
        return parseInt(Math.random() * (max - min + 1) + min);
    }


    // 封裝函數(shù)求出圓的面積
    function circleArea(r) {
        return Math.PI * r * r;
    }
    console.log(circleArea(10));

五浸须、瀏覽器嗅探

可以獲取瀏覽器內(nèi)核、瀏覽器邦泄、操作系統(tǒng)版本等信息删窒。

  • window.navigator.userAgent

以上內(nèi)容純屬個人理解,由于水平有限顺囊,若有錯漏之處敬請指出斧正肌索,小弟不勝感激。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末包蓝,一起剝皮案震驚了整個濱河市驶社,隨后出現(xiàn)的幾起案子企量,更是在濱河造成了極大的恐慌测萎,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件届巩,死亡現(xiàn)場離奇詭異硅瞧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恕汇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門腕唧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘾英,你說我怎么就攤上這事枣接。” “怎么了缺谴?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵但惶,是天一觀的道長。 經(jīng)常有香客問我湿蛔,道長膀曾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任阳啥,我火速辦了婚禮添谊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘察迟。我一直安慰自己斩狱,他們只是感情好耳高,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著所踊,像睡著了一般祝高。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上污筷,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天工闺,我揣著相機(jī)與錄音,去河邊找鬼瓣蛀。 笑死陆蟆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的惋增。 我是一名探鬼主播叠殷,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诈皿!你這毒婦竟也來了林束?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤稽亏,失蹤者是張志新(化名)和其女友劉穎壶冒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體截歉,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡胖腾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘪松。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咸作。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宵睦,靈堂內(nèi)的尸體忽然破棺而出记罚,到底是詐尸還是另有隱情,我是刑警寧澤壳嚎,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布桐智,位于F島的核電站,受9級特大地震影響诬辈,放射性物質(zhì)發(fā)生泄漏酵使。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一焙糟、第九天 我趴在偏房一處隱蔽的房頂上張望口渔。 院中可真熱鬧,春花似錦穿撮、人聲如沸缺脉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攻礼。三九已至业踢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間礁扮,已是汗流浹背知举。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留太伊,地道東北人雇锡。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像僚焦,于是被迫代替她去往敵國和親锰提。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

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

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,212評論 0 4
  • 一場春雨細(xì)細(xì)碎碎灑下,青石板上叮咚的雨聲在女子耳邊縈繞不絕名扛。一把油紙傘谅年,游曳在雨中。傘下的佳人并未濃妝淡抹罢洲,只是一...
    冬苡沫閱讀 225評論 0 1
  • 今年我決定辭職所有的工作來一場畢業(yè)旅行 忙完最后一單 拉起我的行李箱 出發(fā)半月回歸 我特別愛旅行 這是我最大的愛好...
    LIU花花閱讀 261評論 0 3
  • 已經(jīng)好長時間沒有上《簡書》了踢故,我不想解釋什么文黎,也不必解釋什么惹苗,不過還得感謝勃君,雖然我7月的表現(xiàn)耸峭,令勃君很是失望桩蓉,...
    黑莓可愛多閱讀 154評論 0 0
  • 好奇害死的不僅僅是貓,比貓的好奇心強(qiáng)的是猿類和猴類劳闹,而人類的好奇心比別的動物要強(qiáng)烈的多院究。好奇心給人帶來這么大的危險...
    RIARONG閱讀 578評論 0 4