js筆記二十四之函數(shù)的形參與實(shí)參

函數(shù)中的形參和實(shí)參

形參: 相當(dāng)于生產(chǎn)洗衣機(jī)的時(shí)候提供的入口,需要用戶(hù)執(zhí)行函數(shù)的時(shí)候把需要的值傳遞進(jìn)來(lái),形參是個(gè)變量,用來(lái)存儲(chǔ)和接受這些值
實(shí)參: 用戶(hù)執(zhí)行的時(shí)候傳遞給形參的具體值

// 隨便求出兩個(gè)數(shù)的和
function sum(num1,num2){ // num1/num2 就是形參變量(類(lèi)似于var了一下)
    var total = num1 + num2;
    total *= 10;
    total = total.toFixed(2);
    console.log(total)
}

// 
sum(1,2)    // -> 30.00
sum(3,4)    // -> 70.00
sum(23,41)  // -> 640.00
sum(10)     // num1 = 10;num2 = undefined; undefined = NaN ; 10 + NaN = NaN;
// 隨便求出兩個(gè)數(shù)的和
function sum(num1,num2){
    // 如果有一個(gè)值沒(méi)有傳遞的話(huà),為了保證結(jié)果不是NaN,我們?yōu)槠湓O(shè)置一個(gè)默認(rèn)的值: 0;
    typeof num1 === "undefined"?num1 = 0: null; // -> num1 = num1 || 0;
    typeof num2 === "undefined"?num2 = 0: null; // -> num2 = num2 || 0;
    // 容錯(cuò)處理
    
    var total = num1 + num2;
    total *= 10;
    total = total.toFixed(2);
    console.log(total)
}

arguments 實(shí)參集合

當(dāng)我們不知道用戶(hù)具體要傳遞幾個(gè)值的時(shí)候(傳遞幾個(gè)值都行),此時(shí)我們無(wú)法設(shè)置形參的個(gè)數(shù),遇到此類(lèi)需求,需要使用內(nèi)置的實(shí)參集合: arguments

  1. arguments只有函數(shù)才有
  2. 不管執(zhí)行函數(shù)的時(shí)候時(shí)候傳遞實(shí)參, arguments天生就存在,沒(méi)有傳遞實(shí)參arguments是個(gè)空集合, 傳遞了arguments中包含了所有的實(shí)參值
  3. 不管是否設(shè)置了形參,arguments中始終存儲(chǔ)了所有的實(shí)參信息.
function sum(){
    console.log(arguments);
}
sum(1,2,3) // ->Arguments(3) [1, 2, 3, callee: ?, Symbol(Symbol.iterator): ?]

arguments是一個(gè)類(lèi)數(shù)組集合

  1. 以數(shù)字作為索引(屬性名), 從零開(kāi)始
    arguments[0] 第一個(gè)實(shí)參
    arguments[1] 第二個(gè)實(shí)參
    ...
  2. 有一個(gè)length的屬性,存儲(chǔ)的是當(dāng)前集合的長(zhǎng)度(當(dāng)前傳遞的實(shí)參個(gè)數(shù))
    arguments.length
    arguments['length']

arguments.callee: 存儲(chǔ)的是當(dāng)前函數(shù)本身
arguments.callee.caller: 存儲(chǔ)的是當(dāng)前函數(shù)在哪執(zhí)行的(宿主本身),在全局環(huán)境下執(zhí)行的,結(jié)果是: null

"use strict" // 開(kāi)啟嚴(yán)格模式
function sum(){
    console.log(arguments.callee)
    // Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
}
sum()

// arguments.callee或者arguments.callee.caller一般真正的項(xiàng)目中很少使用,因?yàn)樵趈s嚴(yán)格模式下,或報(bào)錯(cuò)
function sum(){
    var total = null;   
    for (var i = 0; i < arguments.length; i++) {
        var cur = arguments[i]; // 每一輪循環(huán)獲取當(dāng)前傳遞的那個(gè)實(shí)參值
        // 為了防止字符串+數(shù)字是字符串拼接不是數(shù)學(xué)累加,我們最好把其他數(shù)據(jù)類(lèi)型首先轉(zhuǎn)換為number類(lèi)型
        cur  = Number(cur);
        if(isNaN(cur) === false){
            total += cur;
        }
    }
    console.log(total);
}
sum(10,20);
sum();
sum(10,20,'30');
sum(10,20,'30','lelei');
function sum(){
    var total = null;   
    for (var i = 0; i < arguments.length; i++) {
        var cur = Number(arguments[i]);
        !isNaN(cur)?total += cur:null;
    }
    console.log(total);
}
sum(10,20);
sum();
sum(10,20,'30');
sum(10,20,'30','lelei');
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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