【JS筆記】四、function函數(shù)精講及選項卡案例開發(fā) 2022-06-15

32-函數(shù)的基礎概念

函數(shù) function

函數(shù)就是一個方法或者一個功能體,函數(shù)就是把實現(xiàn)某個功能的代碼放到一起進行封裝,以后想要操作實現(xiàn)這個功能,只需要把函數(shù)執(zhí)行即可 =>“封裝”:減少頁面中的冗余代碼,提高代碼重復使用率(低耦合高內(nèi)聚)

洗衣機就是一個函數(shù),生產(chǎn)洗衣機就是封裝一個函數(shù)(把實現(xiàn)某些功能的代碼封裝進來),生產(chǎn)的時候,不知道用戶洗衣服的時候放什么水、衣服、洗衣液、我們需要提供出入口(提供的入口在函數(shù)中叫做形參,執(zhí)行的時候放的具體東西函數(shù)中叫做實參),洗完衣服需要能拿出來,洗衣機提供一個入口(在函數(shù)中叫做返回值:把函數(shù)處理后的結果能夠返回給外面用)

  • 創(chuàng)建函數(shù)
    • 形參
    • 返回值
  • 執(zhí)行函數(shù)
    • 實參
  • arguments
  • 函數(shù)底層運行機制
    ...

33-函數(shù)基礎語法和形參的細節(jié)知識

創(chuàng)建函數(shù)

//=>ES5老方式
function [函數(shù)名]([形參變量1],...){
    // 函數(shù)體:基于JS完成需要實現(xiàn)的功能
    return [處理后的結果];
}

[函數(shù)名]([實參1],...);
// 求兩個數(shù)的和 算完和后乘以10 然后再除以2
/*
 * sum:函數(shù)名,代表這個函數(shù)
 * sum():讓函數(shù)執(zhí)行,代表的是函數(shù)執(zhí)行返回的結果
 * n/m:是形參,是變量,用來存儲函數(shù)執(zhí)行時傳遞的實參
 * 10/20:是實參,傳遞給形參變量的值
*/
function sum(n,m) {
    let  result = n+m;
    result *=10;
    result /= 2;
    console.log(result);
}
sum(10, 20); // =>150

形參的細節(jié)
創(chuàng)建函數(shù)的時候我們設置了形參變量,但如果執(zhí)行的時候并沒有傳遞給對應的實參值,那么形參變量默認的值是:undefined

function sum(n,m) {
    let  result = n + m;
    result *=10;
    result /= 2;
    console.log(result);
};
sum(); //=>NaN: +號只有兩個作用數(shù)學運算和字符串拼接,undefined不是字符串,undefined + undefined只能是數(shù)學運算 => NaN + NaN => NaN
sum(10); //=>NaN:10 + undefined => 10 + NaN => NaN
sum(10,20); //=>150
sum(10,20,30); //=>150    30沒用

形參默認值處理
如果沒有傳遞形參,給予一個默認值,這樣就不會出現(xiàn)NaN了
在真實項目中,一般做一下形參默認值處理

function sum(n,m){
    if(n === undefined){ // 一般不用這種寫法
        n = 0;
    }
    if(typeof m === "undefined"){ // 一般習慣用這種方法
        m = 0;
    };
    // 以上兩種寫法都可以,但一般習慣第二種,不是所有人都習慣用絕對相等,如果用==,兩種寫法就不一樣了,如下:
    // if(n == undefined){ // n不一定是undefined,還有可能是null,如果傳了null,不嚴謹
    //     n = 0;
    // }
    // if(typeof m == "undefined"){ // m一定是undefined,只有undefined檢測出來是"undefined"
    //     m = 0;
    // };
    let  result = n + m;
    result *= 10;
    result /= 2;
    console.log(result);
};
sum(); //=>0
sum(10); //=>50
sum(10,20); //=>150
sum(10,20,30); //=>150

注:“==” 和 “===”
“==” 的比較規(guī)則:
先檢查兩個操作數(shù)的數(shù)據(jù)類型是否相同
如果相同,則比較兩個數(shù)是否相等
如果不同,則先將兩個數(shù)轉(zhuǎn)換為相同數(shù)據(jù)類型,再進行比較
“===” 的比較規(guī)則:
先檢查兩個操作數(shù)的數(shù)據(jù)類型是否相同
如果相同,則比較兩個數(shù)是否相等
如果不同,返回 false
關于null==undefined返回true
《JavaScript高級程序設計》(第三版):實際上undefined值是派生自null值的,因此ECMA-262規(guī)定對他們的相等性測試要返回true
原文:https://www.zhihu.com/question/492004370/answer/2167439216

34-函數(shù)中的返回值

// ================函數(shù)中的返回值
// 函數(shù)執(zhí)行的時候,函數(shù)體內(nèi)部創(chuàng)建的變量,我們是無法獲取的或者操作的,如果想要獲取內(nèi)部的信息, 我們需要基于RETURN返回值機制,把信息返回才可以。
function sum(n, m) {
    let  result = n + m;
    return result; // 有沒有這行 下面打印都會報錯
}
sum(10, 20);
console.log(result); // => Uncaught ReferenceError: result is not defined
function sum(n, m) {
    let  result = n + m;
    // return的一定是值,此處是把result變量存儲的值返回給外面
    return result; // return 30;
}
console.log(sum(10, 20)); //=>30    sum(10, 20)這個整體是30
let aa = sum(10,20); // 此處必有一個變量接收返回的值,才可以獲取到sum函數(shù)內(nèi)部result存儲的值
console.log(aa); 
// 如果沒有寫return,函數(shù)默認返回值是undefined
function sum(n, m) {
    let  result = n + m;
}
let aa = sum(10,20); // 此處必有一個變量接收返回的值,才可以獲取到sum函數(shù)內(nèi)部result存儲的值
console.log(aa); // =>undefined

控制臺輸入console.log(1) 會出現(xiàn)1和undefined,原因是console.log是瀏覽器內(nèi)置函數(shù),加小括號()是把函數(shù)執(zhí)行,執(zhí)行的作用是把括號內(nèi)的值在控制臺內(nèi)輸出,undefined的原因是log這個函數(shù)沒有返回值,默認返回值是undefined
=>1:log功能實現(xiàn),輸出值
=>undefined:log函數(shù)沒有返回值,默認返回值undefined


origin_img_v2_302be3c8-ac03-4768-8ed7-9fa53c82b0eg.jpg
function sum(n, m) {
    if  (n === undefined|| m === undefined) {
        return; // 函數(shù)體中遇到return,后面代碼則不再執(zhí)行了(關聯(lián):循環(huán)體中遇到continue和break也會停止循環(huán))
    }
    let result = n + m;
}
sum(10, 20);

return總結:
1、應用場景:執(zhí)行完的結果或執(zhí)行過程當中的某個值,拿到函數(shù)外面來用,此時需要返回值
2、返回的一定是值,不是變量,需要在外面接收一下,可以用變量來接收,一般是創(chuàng)建一個變量,等于函數(shù)執(zhí)行的結果
3、如果函數(shù)沒有寫返回值,默認返回值undefined
4、函數(shù)體中遇到return,不一定是要返回返回值,是讓后面代碼不再執(zhí)行

35-匿名函數(shù)

// ==========匿名函數(shù)

// 匿名函數(shù)之函數(shù)表達式:把一個匿名函數(shù)本身作為值賦值給其他東西(不一定是等號右邊,比如設置定時器),這種函數(shù)一般不是手動觸發(fā)(函數(shù)名+小括號)的,而是靠其他程序驅(qū)動觸發(fā)執(zhí)行(例如:觸發(fā)某個事件的時候把函數(shù)執(zhí)行)
document.body.onclick = function () {};
setTimeout(function(){},1000); //=> 設置定時器,1000MS后執(zhí)行匿名函數(shù),相當于把一個匿名函數(shù)本身作為值賦給定時器

// 匿名函數(shù)之自執(zhí)行函數(shù):創(chuàng)建完一個匿名函數(shù),緊接著就把當前函數(shù)加小括號執(zhí)行
(function (n) {
   // n = 100
})(100); // 前面是創(chuàng)建一個匿名函數(shù),并且要加小括號包起來不然報紅線語法錯誤,緊接著加一個小括號將當前函數(shù)執(zhí)行
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容