2016-09-01 23 views
0

switchステートメントのすべてのケースで、ifステートメントの結果を変数に記録したいとします。問題は私のケースで変数の初期値 - 0を使用するたびに、前のケースで与えられた値ではないので、私はいつもmyNum = 1になります。私はこの問題に対する共通の解決策が何であるかを知りたい。switchステートメント内のifステートメントの変数に値を格納する場合

Iはまた、2つの戻りtrueそれはケース1からの変更、すなわち、しかし全体のアレイが、今[false,true,false,false]ある、myArray[1] = true変化が変数に保存されていない場合には、アレイケース1はmyArray[0] = trueを変更var myArray = [false,false,false,false];ifステートメントでこれを試みました代わりに初期変数値を使用しています。

switch文の外でコンソールに値を記録すると、どちらの場合も同じです。

$scope.clickItem = function(result){ 
var myNum = 0; 
function addNum() { 
    myNum++; 
}; 

switch(currentString) { 
    case string1: 
    if($scope.img1 === result){ 
     addNum(); 
     console.log('myNum is ' + myNum); // <- It's 1 
     $scope.currentString = $scope.val2; 
    } 
    else{ 
     console.log("Wrong.."); 
    } 
    break; 

    case $scope.val2: 
    if($scope.img2 === result){ 
     addNum(); 
     console.log('myNum is ' + myNum); // <- It's 1 again, when it should be 2. 
     $scope.currentString = $scope.val3; 
    } 
    else{ 
     console.log("Wrong.."); 
    } 
    break; 

    case $scope.val3: 
    if($scope.img3 === result){ 
     addNum(); 
     $scope.currentString = $scope.val4; 
    } 
    else{ 
    console.log("Wrong.."); 
} 
break; 
} 
...etc 
+0

私は大ファンではありませんが、可変変数をグローバルにすることで、アプリの開始時に初期化され、必要になるたびにインクリメントされるようにすることができます。 –

+0

「myNum」はグローバルなので、その値は保持する必要がありますが、表示されていない関数内のローカル変数の場合は、内部の関数が実行されるたびにリセットされます。これは、上記のコードを含む関数と同じスコープレベルで 'myNum'を宣言することによって行われます。あなたの質問を[編集して] [最小で完全で検証可能な例](http://stackoverflow.com/help/mcve)を提供してください。 – nnnnnn

+0

あなたは完全なコードを提供していないので、私はちょうど、ループから* myNum *を設定する必要があると思います。今度は、それぞれの変数をリセットします。また、関数* addNum()*をループ外に移動します。 –

答えて

0

あなたmyNum変数が0にあなたがclickItem関数を呼び出すたびに設定されています。それはあなたが何をすべき

1上には、あなたの $scope、このようにグローバル変数を設定して取得することはできません。

$scope.myNum = 0; 
$scope.clickItem = function(result){ 
    function addNum() { 
     $scope.myNum++; 
    }; 
    ... 
}; 

あなたは結果をログに記録する方法を変更することを忘れないでください:

console.log("myNum is" + $scope.myNum); 
関連する問題