[英]How to use a variable number of arguments in a JavaScript function
當有多個參數時,我很難理解如何將信息從第二個函數返回到第一個函數。 現在,我知道以下代碼有效。
function One() {
var newVal = 0;
newVal = Too(newVal);
console.log(newVal);
}
function Too(arg) {
++arg;
return arg;
}
但是,如果我嘗試通過添加參數和setinterval使事情復雜化怎么辦?
function One() {
var newVal = 0;
var z = 3;
var y = 3;
var x = 1;
newVal = Too(newVal);
var StopAI2 = setInterval(function () {
Too(x, y, z, newVal)
}, 100);
}
function Too(Xarg, Yarg, Zarg, newValarg) {
Xarg*Xarg;
Yarg*Yarg;
Zarg*Zarg;
++newValarg;
return newValarg;
}
我不確定如何處理newVal =代碼行。 我只想返回newVal而不是x,y,z。
我想這就是您要問的問題:
僅傳遞一個參數時,如何對函數的第四個參數進行操作?
這個問題的答案是這樣的:
如果要對函數的第4個參數進行操作,則必須至少將4個參數傳遞給該函數。
您可以通過幾種方法來不同地解決問題。
如果總是有一個參數,請確保它是第一個參數:
function Too(mandatoryArg, optionalArg1, optionalArg2) {
alert(++mandatoryArg);
if (optionalArg1) {
alert(++optionalArg1);
}
}
為所有未定義或未知參數傳遞占位符值。
您可以使用null
, undefined
或''
。
alert(Too(null, null, 4));
function Too(optArg1, optArg2, mandatoryArg) {
alert(++mandatoryArg);
}
根據參數數量做出決定:
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
在函數one()中僅修改d
的值。
這是因為d
被分配了two()的返回值。
在two()內部對a
, b
和c
的更改對one()內部的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);
}
這里有兩個概念在起作用。
1。 可變數量的功能參數(或可選參數)。
如果要使用不同數量的參數調用同一函數(最終將導致頭痛),則需要確定(在函數內部)如何調用此函數。 您可以使用每個函數內部可用的arguments
對象:
function Too() {
if (arguments.length == 4) {
arguments[0]*arguments[0];
arguments[1]*arguments[1];
arguments[2]*arguments[2];
return ++arguments[3];
} else if (arguments.length == 1) {
return ++arguments[0];
} else {
// you decide what to do here
}
}
2。 異步代碼執行。
意識到時間間隔到期時調用的Too
,在One
完成並返回后執行良好。 如果你想Too
影響newVal
變量,並在這個新的價值某種方式得到之后, -使newVal
可變全球。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.