1

私の質問は多くの人にとって非常に簡単かもしれませんが、Javascript は初めてです。次のコードの何が問題なのか、私には本当にわかりません。

var newValue = 1;
function getCurrentAmount() {

return [newValue,2,3];
}
var result = getCurrentAmount();
console.log(result[0] + "" + result[1] + result[2]);

上記のコードで、コンソールに表示される結果は次のとおりです。 undefined23 結果が「123」でないのはなぜですか? 関数が呼び出されるたびにnewValueを1ずつ増やしたいので、グローバル変数を使用しようとしています。次のようなものが欲しい:

var newValue = 1;
function getCurrentAmount() {
newValue ++;
return [newValue,2,3];
}
setInterval(function(){
   var result = getCurrentAmount();
    console.log(result[0] + "" + result[1] + result[2]);
}, 1000);

また、次のコードに飽きただけで、期待どおりに動作します。

    var newValue =1;
    function test() {
    newValue ++;
    return newValue;
}

console.log(test());

したがって、問題はアレイに関するものだと思います。

私の質問が十分に明確であることを願っています。前もって感謝します。

4

5 に答える 5

2

より良いアプローチは、クロージャnewValueを使用してグローバル スコープから保護することです。そのようです:

var getCurrentAmount = (function () {
    var newValue = 1; // newValue is defined here, hidden from the global scope
    return function() { // note: return an (anonymous) function
        newValue ++;
        return [newValue,2,3];
    };
)()); // execute the outer function
console.log(getCurrentAmount());
于 2012-11-28T17:01:46.140 に答える
0

次のように「一種の静的」変数を実装できます。

function getCurrentAmount() {
    var f = arguments.callee, newValue = f.staticVar || 0;
    newValue++;
    f.staticVar = newValue;
    return [newValue,2,3];
}

これは、グローバル変数アプローチよりもうまく機能するはずです。

于 2012-11-28T16:58:21.830 に答える
0

あなたが与えたコードは、あなたが報告したものではなく、期待どおりに動作します。これは、実証するjsfiddle です。

newValue質問で示しているものとは異なるコンテキストで設定したに違いありません。

于 2012-11-28T16:59:46.523 に答える
0

このコードは私のために働きます:

var newValue = 1;
function getCurrentAmount() {

return [newValue,2,3];
}
var result = getCurrentAmount();
console.log(result[0] + "" + result[1] + result[2]);

ここを見てください: http://jsfiddle.net/PAfRA/

于 2012-11-28T17:00:20.270 に答える
0

動作しないと言うコードは実際に動作しています。動作するデモを参照してください。動作しない場合は、グローバル スコープに変数がない可能性がありますnewValue(つまり、js ファイルのルートにあり、内部にはありません)。その他の機能)。

于 2012-11-28T17:00:37.077 に答える