函數(shù)袍患,調(diào)用函數(shù),函數(shù)的封裝竣付,參數(shù)诡延,求兩個(gè)數(shù)和,函數(shù)形參和實(shí)參個(gè)數(shù)不匹配問(wèn)題古胆,返回值肆良,求最大值,求數(shù)組最大值逸绎,return惹恃,arguments,翻轉(zhuǎn)任意函數(shù)棺牧,冒泡排序巫糙,判斷閏年,函數(shù)調(diào)用另一個(gè)函數(shù)...

1.1函數(shù)

在js里面颊乘,可能會(huì)定義非常多的相同代碼或者功能類似的代碼参淹,這些代碼可能需要大量重復(fù)使用。雖然for循環(huán)語(yǔ)句也能實(shí)現(xiàn)一些簡(jiǎn)單的重復(fù)操作疲牵,但是比較具有局限性承二,此時(shí)我們就可以使用js中的函數(shù)榆鼠。

   // 1. 求 1~100的累加和
        var sum = 0;
        for (var i = 1; i <= 100; i++) {
            sum += i;
        }
        console.log(sum);

        // 2. 求 10~50的累加和
        var sum = 0;
        for (var i = 10; i <= 50; i++) {
            sum += i;
        }
        console.log(sum);

        // 3. 函數(shù)就是封裝了一段可以被重復(fù)執(zhí)行調(diào)用的代碼塊 目的: 就是讓大量代碼重復(fù)使用
        function getSum(num1, num2) {
            var sum = 0;
            for (var i = num1; i <= num2; i++) {
                sum += i;
            }
            console.log(sum);
        }
        getSum(1, 100);
        getSum(10, 50);
        getSum(1, 1000);

1.2函數(shù)的使用

函數(shù)在使用時(shí)分為兩步:聲明函數(shù)和調(diào)用函數(shù)

  • 聲明函數(shù)本身并不會(huì)執(zhí)行代碼纲爸,只有調(diào)用函數(shù)時(shí)才會(huì)執(zhí)行函數(shù)體代碼。
1.2.1聲明函數(shù)
 // 函數(shù)使用分為兩步: 聲明函數(shù) 和 調(diào)用函數(shù)
        // 1. 聲明函數(shù)
        // function 函數(shù)名() {
        //     // 函數(shù)體
        // }
        function sayHi() {
            console.log('hi~~');
        }
        // (1) function 聲明函數(shù)的關(guān)鍵字 全部小寫
        // (2) 函數(shù)是做某件事情妆够,函數(shù)名一般是動(dòng)詞 sayHi 
        // (3) 函數(shù)不調(diào)用自己不執(zhí)行
1.2.2調(diào)用函數(shù)
 // 函數(shù)名();
        sayHi();
        // 調(diào)用函數(shù)的時(shí)候千萬(wàn)不要忘記加小括號(hào)

1.3函數(shù)的封裝

  • 函數(shù)的封裝就是把一個(gè)或者多個(gè)功能通過(guò)函數(shù)的方式封裝起來(lái)识啦,對(duì)外只提供一個(gè)簡(jiǎn)單的函數(shù)接口。
 // 利用函數(shù)計(jì)算1-100之間的累加和 
        // 1. 聲明函數(shù)
        function getSum() {
            var sum = 0;
            for (var i = 1; i <= 100; i++) {
                sum += i;
            }
            console.log(sum);

        }
        // 2. 調(diào)用函數(shù)
        getSum();
        getSum();

1.4函數(shù)的參數(shù)

形參和實(shí)參
形參:在聲明函數(shù)的小括號(hào)里
實(shí)參:在調(diào)用函數(shù)的小括號(hào)里

// 2. 我們可以利用函數(shù)的參數(shù)實(shí)現(xiàn)函數(shù)重復(fù)不同的代碼
        // function 函數(shù)名(形參1,形參2...) { // 在聲明函數(shù)的小括號(hào)里面是 形參 (形式上的參數(shù))

        // }
        // 函數(shù)名(實(shí)參1,實(shí)參2...); // 在函數(shù)調(diào)用的小括號(hào)里面是實(shí)參(實(shí)際的參數(shù))
        // 3. 形參和實(shí)參的執(zhí)行過(guò)程(函數(shù)如果沒(méi)有調(diào)用則不執(zhí)行神妹,于是先是 cook('酸辣土豆絲');隨后往上找cook這個(gè)函數(shù)颓哮,然后將酸辣土豆絲賦值給aru。
        function cook(aru) { // 形參是接收實(shí)參的  aru = '酸辣土豆絲' 形參類似于一個(gè)變量
            console.log(aru);
        }
        cook('酸辣土豆絲');
        cook('大肘子');
        // 4. 函數(shù)的參數(shù)可以有鸵荠,也可以沒(méi)有個(gè)數(shù)不限
利用函數(shù)求任意兩個(gè)數(shù)的和
  // 1. 利用函數(shù)求任意兩個(gè)數(shù)的和
        function getSum(num1, num2) {
            console.log(num1 + num2);

        }
        getSum(1, 3);
        getSum(3, 8);
        // 2. 利用函數(shù)求任意兩個(gè)數(shù)之間的和
        function getSums(start, end) {
            var sum = 0;
            for (var i = start; i <= end; i++) {
                sum += i;
            }
            console.log(sum);

        }
        getSums(1, 100);
        getSums(1, 10);
        // 3. 注意點(diǎn)
        // (1) 多個(gè)參數(shù)之間用逗號(hào)隔開(kāi)
        // (2) 形參可以看做是不用聲明的變量

1.5函數(shù)形參和實(shí)參個(gè)數(shù)不匹配問(wèn)題

參數(shù)個(gè)數(shù) 說(shuō)明
實(shí)參等于形參個(gè)數(shù) 輸出正確結(jié)果
實(shí)參多于形參個(gè)數(shù) 只取到形參個(gè)數(shù)
實(shí)參小于形參個(gè)數(shù) 多的形參定義為undefined,結(jié)果為NaN
  // 函數(shù)形參實(shí)參個(gè)數(shù)匹配
        function getSum(num1, num2) {
            console.log(num1 + num2);

        }
        // 1. 如果實(shí)參的個(gè)數(shù)和形參的個(gè)數(shù)一致 則正常輸出結(jié)果
        getSum(1, 2);
        // 2. 如果實(shí)參的個(gè)數(shù)多于形參的個(gè)數(shù)  會(huì)取到形參的個(gè)數(shù) 
        getSum(1, 2, 3);
        // 3. 如果實(shí)參的個(gè)數(shù)小于形參的個(gè)數(shù)  多于的形參定義為undefined  最終的結(jié)果就是 NaN
        // 形參可以看做是不用聲明的變量  num2 是一個(gè)變量但是沒(méi)有接受值  結(jié)果就是undefined 
        getSum(1); // NaN
        // 建議 我們盡量讓實(shí)參的個(gè)數(shù)和形參相匹配

1.6函數(shù)的返回值

1.6.1return語(yǔ)句

有的時(shí)候我們會(huì)希望函數(shù)將值返回給調(diào)用者冕茅,此時(shí)通過(guò)使用renturn語(yǔ)句就可以實(shí)現(xiàn)

function 函數(shù)名() {
              return 需要返回的結(jié)果;
       }
函數(shù)名();

(1) 我們函數(shù)只是實(shí)現(xiàn)某種功能,最終的結(jié)果需要返回給函數(shù)的調(diào)用者函數(shù)名() 通過(guò)return 實(shí)現(xiàn)的
(2) 只要函數(shù)遇到return 就把后面的結(jié)果 返回給函數(shù)的調(diào)用者 函數(shù)名() = return后面的結(jié)果

 function getResult() {
            return 666;
        }
        getResult(); // getResult()   = 666
        console.log(getResult());

        // function cook(aru) {
        //     return aru;
        // }
        // console.log(cook('大肘子'));
        // 4. 求任意兩個(gè)數(shù)的和
        function getSum(num1, num2) {
            return num1 + num2;
        }
        console.log(getSum(1, 2));
求兩個(gè)數(shù)的最大值
// 利用函數(shù) 求兩個(gè)數(shù)的最大值
        function getMax(num1, num2) {
            // if (num1 > num2) {
            //     return num1;
            // } else {
            //     return num2;
            // }
            return num1 > num2 ? num1 : num2;
        }
        console.log(getMax(1, 3));
        console.log(getMax(11, 3));
求數(shù)組中的最大值
  // 利用函數(shù)求數(shù)組 [5,2,99,101,67,77] 中的最大數(shù)值。
        function getArrMax(arr) { // arr 接受一個(gè)數(shù)組  arr =  [5,2,99,101,67,77]
            var max = arr[0];
            for (var i = 1; i <= arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
            }
            return max;
        }
        // getArrMax([5, 2, 99, 101, 67, 77]); // 實(shí)參是一個(gè)數(shù)組送過(guò)去
        // 在我們實(shí)際開(kāi)發(fā)里面姨伤,我們經(jīng)常用一個(gè)變量來(lái)接受 函數(shù)的返回結(jié)果 使用更簡(jiǎn)單
        // var re = getArrMax([5, 2, 99, 101, 67, 77]);
        var re = getArrMax([3, 77, 44, 99, 143]);
        console.log(re);
注意事項(xiàng)
  1. return 終止函數(shù)
 function getSum(num1, num2) {
            return num1 + num2; // return 后面的代碼不會(huì)被執(zhí)行
            alert('我是不會(huì)被執(zhí)行的哦哨坪!')
        }
        console.log(getSum(1, 2));
  1. return 只能返回一個(gè)值
function fn(num1, num2) {
            return num1, num2; // 返回的結(jié)果是最后一個(gè)值
        }
        console.log(fn(1, 2));
  1. 我們求任意兩個(gè)數(shù)的 加減乘數(shù)結(jié)果
function getResult(num1, num2) {
            return [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
        }
        var re = getResult(1, 2); // 返回的是一個(gè)數(shù)組
        console.log(re);
  1. 我們的函數(shù)如果有return 則返回的是 return 后面的值,如果函數(shù)媒有 return 則返回undefined
  function fun1() {
            return 666;
        }
        console.log(fun1()); // 返回 666
        function fun2() {

        }
        console.log(fun2()); // 函數(shù)返回的結(jié)果是 undefined

break,continue,return的區(qū)別

  • break :結(jié)束當(dāng)前的循環(huán)體(如for乍楚、while)
  • continue:跳出本次循環(huán)当编,繼續(xù)執(zhí)行下次循環(huán)(如for、while)
  • return:不僅可以退出循環(huán)徒溪,還能夠返回return語(yǔ)句中的值忿偷,同時(shí)還可以結(jié)束當(dāng)前的函數(shù)體內(nèi)代碼

1.7arguments的使用

當(dāng)我們不確定有多少個(gè)參數(shù)傳遞時(shí),可以用arguments來(lái)獲取臊泌。在js中鲤桥,arguments實(shí)際上它時(shí)當(dāng)前函數(shù)的一個(gè)內(nèi)置對(duì)象。所有函數(shù)都內(nèi)置了一個(gè)arguments對(duì)象渠概,arguments對(duì)象中存儲(chǔ)了傳遞的所有實(shí)參芜壁。

function fn() {
            console.log(arguments); //里面存儲(chǔ)了所有傳遞過(guò)來(lái)的實(shí)參 1 2 3
            console.log(arguments.length);// 3
            console.log(arguments[2]);//3
             // 我們可以按照數(shù)組的方式遍歷arguments
            for (var i = 0; i < arguments.length; i++) {
                console.log(arguments[i]);
}
fn(1,2,3);

arguments展示形式時(shí)一個(gè)偽數(shù)組,因此可以進(jìn)行遍歷高氮。偽數(shù)組具有以下特點(diǎn):

  • 具有l(wèi)ength屬性
    console.log(arguments.length);
  • 按索引方式存儲(chǔ)數(shù)據(jù)
  • 不具有數(shù)組的push慧妄,pop等方法
利用函數(shù)求任意個(gè)數(shù)的最大值
  function getMax() { // arguments = [1,2,3]
            var max = arguments[0];
            for (var i = 1; i < arguments.length; i++) {
                if (arguments[i] > max) {
                    max = arguments[i];
                }
            }
            return max;
        }
        console.log(getMax(1, 2, 3));
        console.log(getMax(1, 2, 3, 4, 5));
        console.log(getMax(11, 2, 34, 444, 5, 100));
利用函數(shù)翻轉(zhuǎn)任意數(shù)組 reverse 翻轉(zhuǎn)
function reverse(arr) {
            var newArr = [];
            for (var i = arr.length - 1; i >= 0; i--) {
                newArr[newArr.length] = arr[i];
            }
            return newArr;
        }
        var arr1 = reverse([1, 3, 4, 6, 9]);
        console.log(arr1);
        var arr2 = reverse(['red', 'pink', 'blue']);
        console.log(arr2);
利用函數(shù)冒泡排序
 function sort(arr) {
            for (var i = 0; i < arr.length - 1; i++) {
                for (var j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j] > arr[j + 1]) {
                        var temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            return arr;
        }
        var arr1 = sort([1, 4, 2, 9]);
        console.log(arr1);
        var arr2 = sort([11, 7, 22, 999]);
        console.log(arr2);
利用函數(shù)判斷閏年
function isRunYear(year) {
            // 如果是閏年我們返回 true  否則 返回 false 
            var flag = false;
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                flag = true;
            }
            return flag;
        }
        console.log(isRunYear(2000));
        console.log(isRunYear(1999));

1.8函數(shù)可以調(diào)用另一個(gè)函數(shù)

因?yàn)槊總€(gè)函數(shù)都是獨(dú)立的代碼塊,用于完成特殊任務(wù)剪芍,因此經(jīng)常會(huì)用到函數(shù)相互調(diào)用的情況塞淹。

// 函數(shù)是可以相互調(diào)用的
        // function fn1() {
        //     console.log(11);
        //     fn2(); // 在fn1 函數(shù)里面調(diào)用了 fn2 函數(shù)
        // }
        // fn1();

        // function fn2() {
        //     console.log(22);

        // }

        function fn1() {
            console.log(111);
            fn2();
            console.log('fn1');
        }

        function fn2() {
            console.log(222);
            console.log('fn2');
        }
        fn1();
輸出年份的2月份天數(shù)
// 用戶輸入年份,輸出當(dāng)前年份2月份的天數(shù)
        function backDay() {
            var year = prompt('請(qǐng)您輸入年份:');
            if (isRunYear(year)) { // 調(diào)用函數(shù)需要加小括號(hào)
                alert('當(dāng)前年份是閏年2月份有29天');
            } else {
                alert('當(dāng)前年份是平年2月份有28天');
            }
        }
        backDay();


        // 判斷是否為閏年的函數(shù)
        function isRunYear(year) {
            // 如果是閏年我們返回 true  否則 返回 false 
            var flag = false;
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                flag = true;
            }
            return flag;d
        }

1.9函數(shù)的兩種聲明方式

 // 1. 利用函數(shù)關(guān)鍵字自定義函數(shù)(命名函數(shù))
        function fn() {

        }
        fn();
        // 2. 函數(shù)表達(dá)式(匿名函數(shù)) 
        // var 變量名 = function() {};
        var fun = function(aru) {
            console.log('我是函數(shù)表達(dá)式');
            console.log(aru);

        }
        fun('pink老師');
        // (1) fun是變量名 不是函數(shù)名  
        // (2) 函數(shù)表達(dá)式聲明方式跟聲明變量差不多罪裹,只不過(guò)變量里面存的是值 而 函數(shù)表達(dá)式里面存的是函數(shù)
        // (3) 函數(shù)表達(dá)式也可以進(jìn)行傳遞參數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末组贺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子廷痘,更是在濱河造成了極大的恐慌尘应,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峡继,死亡現(xiàn)場(chǎng)離奇詭異冯袍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)碾牌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門康愤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人舶吗,你說(shuō)我怎么就攤上這事征冷。” “怎么了誓琼?”我有些...
    開(kāi)封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵检激,是天一觀的道長(zhǎng)肴捉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)叔收,這世上最難降的妖魔是什么每庆? 我笑而不...
    開(kāi)封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮今穿,結(jié)果婚禮上缤灵,老公的妹妹穿的比我還像新娘。我一直安慰自己蓝晒,他們只是感情好腮出,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著芝薇,像睡著了一般胚嘲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洛二,一...
    開(kāi)封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天馋劈,我揣著相機(jī)與錄音,去河邊找鬼晾嘶。 笑死妓雾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的垒迂。 我是一名探鬼主播械姻,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼机断!你這毒婦竟也來(lái)了楷拳?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吏奸,失蹤者是張志新(化名)和其女友劉穎欢揖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體奋蔚,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡她混,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旺拉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片产上。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蛾狗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仪媒,我是刑警寧澤沉桌,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布谢鹊,位于F島的核電站,受9級(jí)特大地震影響留凭,放射性物質(zhì)發(fā)生泄漏佃扼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一蔼夜、第九天 我趴在偏房一處隱蔽的房頂上張望兼耀。 院中可真熱鬧,春花似錦求冷、人聲如沸瘤运。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拯坟。三九已至,卻和暖如春韭山,著一層夾襖步出監(jiān)牢的瞬間郁季,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工钱磅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梦裂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓盖淡,卻偏偏與公主長(zhǎng)得像塞琼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子禁舷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348