js中每个函数都有arguments属性. 可以在函数体里面直接获得 : 如
function qlTest() {
var arg = arguments;
}
其中arguments是一个Array, 它是函数获得的参数的集合, 通过这个属性可以对函数设置可选参数.
比如: 定义一个函数
function qlTest(arg0, arg1) {
}
在callFunction中作如下调用:
function callFunction(arg0, arg1, arg2, arg3) {
qlTest(arg0, arg1, arg2, arg3);
}
但由于函数"qlTest"声明只接受两个参数, 而在"callFunction"调用时却传了4个参数, 或许你会产生如此疑问 :
这样js引擎是不是会报错呢?
答案是否定的. 不但不会报错, 你还可以在函数体内通过arguments属性获得这些没有显式声明的参数.
现在我们将改变函数"qlTest"的函数体如下 :
function qlTest(arg0, arg1) {
var necessaryArg = new Array();
necessaryArg.push(arg0);
necessaryArg.push(arg1);
var optionalArg = new Array();
for(var i = 2; i < arguments.length; i++) {
optionalArg.push(arguments[i]);
}
}
如此以来我们就实现了arg0 和 arg1是必选项, 而其他的则为可选参数的目的.
function qlTest() {
var arg = arguments;
}
其中arguments是一个Array, 它是函数获得的参数的集合, 通过这个属性可以对函数设置可选参数.
比如: 定义一个函数
function qlTest(arg0, arg1) {
}
在callFunction中作如下调用:
function callFunction(arg0, arg1, arg2, arg3) {
qlTest(arg0, arg1, arg2, arg3);
}
但由于函数"qlTest"声明只接受两个参数, 而在"callFunction"调用时却传了4个参数, 或许你会产生如此疑问 :
这样js引擎是不是会报错呢?
答案是否定的. 不但不会报错, 你还可以在函数体内通过arguments属性获得这些没有显式声明的参数.
现在我们将改变函数"qlTest"的函数体如下 :
function qlTest(arg0, arg1) {
var necessaryArg = new Array();
necessaryArg.push(arg0);
necessaryArg.push(arg1);
var optionalArg = new Array();
for(var i = 2; i < arguments.length; i++) {
optionalArg.push(arguments[i]);
}
}
如此以来我们就实现了arg0 和 arg1是必选项, 而其他的则为可选参数的目的.