美文网首页js笔记让前端飞Web前端之路
js笔记二十四之函数的形参与实参

js笔记二十四之函数的形参与实参

作者: uplyw | 来源:发表于2018-05-20 18:27 被阅读36次

函数中的形参和实参

形参: 相当于生产洗衣机的时候提供的入口,需要用户执行函数的时候把需要的值传递进来,形参是个变量,用来存储和接受这些值
实参: 用户执行的时候传递给形参的具体值

// 随便求出两个数的和
function sum(num1,num2){ // num1/num2 就是形参变量(类似于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;
// 随便求出两个数的和
function sum(num1,num2){
    // 如果有一个值没有传递的话,为了保证结果不是NaN,我们为其设置一个默认的值: 0;
    typeof num1 === "undefined"?num1 = 0: null; // -> num1 = num1 || 0;
    typeof num2 === "undefined"?num2 = 0: null; // -> num2 = num2 || 0;
    // 容错处理
    
    var total = num1 + num2;
    total *= 10;
    total = total.toFixed(2);
    console.log(total)
}

arguments 实参集合

当我们不知道用户具体要传递几个值的时候(传递几个值都行),此时我们无法设置形参的个数,遇到此类需求,需要使用内置的实参集合: arguments

  1. arguments只有函数才有
  2. 不管执行函数的时候时候传递实参, arguments天生就存在,没有传递实参arguments是个空集合, 传递了arguments中包含了所有的实参值
  3. 不管是否设置了形参,arguments中始终存储了所有的实参信息.
function sum(){
    console.log(arguments);
}
sum(1,2,3) // ->Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]

arguments是一个类数组集合

  1. 以数字作为索引(属性名), 从零开始
    arguments[0] 第一个实参
    arguments[1] 第二个实参
    ...
  2. 有一个length的属性,存储的是当前集合的长度(当前传递的实参个数)
    arguments.length
    arguments['length']

arguments.callee: 存储的是当前函数本身
arguments.callee.caller: 存储的是当前函数在哪执行的(宿主本身),在全局环境下执行的,结果是: null

"use strict" // 开启严格模式
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一般真正的项目中很少使用,因为在js严格模式下,或报错
function sum(){
    var total = null;   
    for (var i = 0; i < arguments.length; i++) {
        var cur = arguments[i]; // 每一轮循环获取当前传递的那个实参值
        // 为了防止字符串+数字是字符串拼接不是数学累加,我们最好把其他数据类型首先转换为number类型
        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');

相关文章

  • js笔记二十四之函数的形参与实参

    函数中的形参和实参 形参: 相当于生产洗衣机的时候提供的入口,需要用户执行函数的时候把需要的值传递进来,形参是个变...

  • 【JS】函数实参与形参

    本节目录 形参 实参 arguments的特性 arguments的非标准用法 arguments小案例 1.形参...

  • python实参与形参

    1.形参与实参 name是形参,Neil是实参,greet是一个函数,Neil的值传给函数,保存在形参中2.位置实参

  • C语言形参与实参

    C语言中形参与实参的关系是:形参是实参的值副本,无论参数的类型是什么,传递到子函数的形参只是实参的值。在子函数里改...

  • Python3:函数

    示例 位置实参与关键字实参 使用位置实参调用函数,实参的顺序要和形参的顺序一样 关键字实参通过形参名-实参的形式传...

  • JavaScript 05 函数

    js函数的概念和作用,js函数的定义,js函数的调用,js事件驱动的概念,js函数的实参和形参,js的作用域,js...

  • JS形参与实参问题

    1.通过实参调用函数的时候,传入函数里的是实参的副本而不是实参,因此在函数里面修改参数值并不会对实参造成影响。 例...

  • Python-函数

    如何定义函数 函数的参数 形参与实参 code: 两种实参 code: 两大形参分类 两个带默认值的形参 不带默认...

  • 《Web前端开发之JavaScript精英课堂》(四)

    函数,初始作用域 函数名的length为形参数,arguments.length为实参数。函数中形参与argume...

  • python 学习笔记 018

    上节课:函数入门 本节课:函数中级应用 参数 1.实参与形参 实参(实际参数):调用函数时给函数传递的数据,本质是...

网友评论

    本文标题:js笔记二十四之函数的形参与实参

    本文链接:https://www.haomeiwen.com/subject/flvtjftx.html