1

複数の引数がある場合に、2 番目の関数から最初の関数に情報を返す方法がわかりません。これで、次のコードが機能することがわかりました。

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 = コード行をどうするかわかりません。x、y、zではなくnewValのみを返したいです。

4

2 に答える 2

3

これはあなたが尋ねようとしていると私が思うものです:

引数が 1 つしか渡されない場合、関数の 4 番目の引数を操作するにはどうすればよいですか?

その質問に対する答えは次のとおりです。

関数の 4 番目の引数を操作する場合は、少なくとも 4 つの引数を関数に渡す必要があります。

問題に別の方法でアプローチできる方法がいくつかあります。

#1

常に必要な引数が 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()内のab、およびへの変更は、 one()内の、、およびの値には影響しません。 cabc

これは、two()の引数の名前がab、および であっても当てはまりcます。

上記のコードをいじってみましょう。



編集#2

ゲーム オブジェクトを動かす関数を作成する方法の 1 つを次に示します。

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);
}

これは、別のアプローチの実際のデモを示すフィドルです。

于 2013-10-18T01:33:05.027 に答える