JavaScript中的函数(一):实参和形参

JavaScript中的函数定义 不用指定形参的类型,调用也不对实参做任何类型检查,甚至连实参个数都不做检查。看看,多么粗暴和自由啊。

1 可选形参

当调用参数个数不够时,可以使用 /* optional */来定义可选参数。
传入形参时,基础类型是传值, 其他是传地址

function getPropertyNames(o, /* optional */ a) {
    a = a || []
    a.push("Adress")
    for(var i in o) {
        a.push(o[i])
    }
    return a;
}

// 调用
var a,b,c;
a = getPropertyNames([1,2]);
console.info(a);

var arr = ["name"]
b = getPropertyNames(["b"], arr);
console.info(b,arr);

运行结果:

["Adress", 1, 2]
["name", "Adress", "b"] ,["name", "Adress", "b"]

说明

  • a = a || [] 是一种惯用用法,使用前a必须要先声明,这里a作为形参,相当于var a
  • 实际运行结果,表明参数a是传地址

2 实参

2.1 可变实参(个数)

function max( /*...*/ ) {
    var max = Number.NEGATIVE_INFINITY;
    console.info(max);

    for (var i = 0; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;

}

console.info(max(10, 6, 80))

结果:
80

2.2 实参内置对象

arguments 参数数组

如果实际参数传入的个数大于函数定义的形参个数,多出的可以使用arguments[i]来获取,arguments是指向实参对象的引用(传地址:改变arguments[i],实参也会一并改变)

callee 和 caller属性

ECMAScrip5严格模式下,这两个属性不可用。非严格模式下,callee表示当前正在执行的函数。

你可能感兴趣的:(JavaScript中的函数(一):实参和形参)