这就是我认为您要问的问题:
当只传递一个参数时,如何对函数的第四个参数进行操作?
这个问题的答案是这样的:
如果要对函数的第 4 个参数进行操作,则必须将至少 4 个参数传递给函数。
有几种方法可以让您以不同的方式解决问题。
#1
如果有一个参数总是必要的,请确保它是第一个参数:
function Too(mandatoryArg, optionalArg1, optionalArg2) {
alert(++mandatoryArg);
if (optionalArg1) {
alert(++optionalArg1);
}
}
#2
为所有未定义或未知的参数传递占位符值。
您可以使用null
,undefined
或''
.
alert(Too(null, null, 4));
function Too(optArg1, optArg2, mandatoryArg) {
alert(++mandatoryArg);
}
#3
根据参数的数量做出决定:
function Too(optArg1, optArg2, optArg3) {
var numArgs = arguments.length;
if (numArgs === 1) {
alert(++optArg1);
}
if (numArgs === 3) {
alert(++optArg3);
}
}
编辑
“这会更新第一个函数中的变量吗?”
让我们用一个实际的例子来展示一些东西:
function one() {
var a = 0;
var b = 25;
var c = 50;
var d = -1;
d = two(a, b, c);
alert("a: " + a);
alert("b: " + b);
alert("c: " + c);
alert("d: " + d);
}
function two(a, b, c) {
++a;
++b;
++c;
if (arguments.length === 1) {
return a;
}
if (arguments.length === 3) {
return c;
}
}
调用one()
将导致以下警报:
a: 0
b: 25
c: 50
d: 51
d
在函数one()中仅修改 的值。
那是因为分配了two()d
的返回值。
two()内部对 , 和 ,a
的b
更改对one()内部的,和 , 和内部的值没有影响。 c
a
b
c
即使two()的参数被命名为a
、b
和 也是如此c
。
这是上面代码的一个小提琴。
编辑#2
这是创建移动游戏对象的函数的一种方法:
var FORWARD = 0;
var BACK = 1;
var LEFT = 2;
var RIGHT = 3;
// use an object with three values to represent a position
var pos = {
x: 0,
y: 0,
z: 0
};
pos = moveObject(pos, FORWARD);
printPosition(pos);
pos = moveObject(pos, LEFT);
printPosition(pos);
pos = moveObject(pos, FORWARD);
printPosition(pos);
pos = moveObject(pos, LEFT);
printPosition(pos);
// invoking moveObject() with one argument
// will move the object forward
pos = moveObject(pos);
printPosition(pos);
function moveObject(position, direction) {
// assume FORWARD if no direction is specified
if (typeof direction === 'undefined') {
direction = FORWARD;
}
if (direction === FORWARD) {
++position.z;
}
if (direction === BACK) {
--position.z;
}
if (direction === LEFT) {
--position.x;
}
if (direction === RIGHT) {
++position.x;
}
return position;
}
function printPosition(pos) {
alert(pos.x + ", " + pos.y + ", " + pos.z);
}
这是一个小提琴,显示了另一种方法的工作演示。