3

私が持っている場合:

function firstFunction(){
    var counter = 0;
    secondFunction();
    secondFunction();
    secondFunction();
    secondFunction();
}
function secondFunction(){
    counter++;
}

変数のローカル スコープが原因でエラーが発生しますが、グローバル変数を使用せずにこのようなことを行うにはどうすればよいでしょうか?

4

4 に答える 4

1

JavaScript のプリミティブ型 (整数や文字列など) は値によって渡されますが、オブジェクトは参照によって渡されるため、オブジェクトを使用する必要があります。

// passing primitive type
var counter = 0;
for (var i = 0; i < 4; ++i) { 
    secondFunction(counter);
}
alert(counter); // 0
function secondFunction(counter) {
    counter++;
}

// passing object
var obj = { counter: 0 }
for (var i = 0; i < 4; ++i) { 
    secondFunction(obj);
}
alert(obj.counter); // 4
function secondFunction(obj) {
    obj.counter++;
}

http://jsfiddle.net/MpVqQ/2/

このようにして、グローバル変数を使用せずに目的を達成できます。

于 2013-05-14T22:02:28.383 に答える
1

オブジェクトを使用してカウンターを参照渡しする

   function firstFunction() {

        var myObj = new Object();
        myObj.counter = 0;

        secondFunction(myObj);
        secondFunction(myObj);
        secondFunction(myObj);
        secondFunction(myObj);

    }

    function secondFunction(obj) {
        obj.counter++;
    }
于 2013-05-14T21:56:37.657 に答える