2016-05-17 10 views
-2

私は電卓を作っています。ここでは、テキスト入力で記述します。コードをテストするために、私はちょうどランダムな数といくつかの "ifs"を作りました。 Here'sコード:JavaScriptで関数を呼び出すことはできません

var res=0, operator, pattern, num1, num2 
myText= "2~3+2" 
pattern= /([\+\-\*\~\V/])/; 
var nums= myText.split(pattern); 

function makeCount() { 
    num1= Number(num1); 
    num2= Number(num2); 

    if (operator=== "~") { 
     num1= Math.pow(num1,num2); 
     nums.splice(i-1, 3, num1); 
    } 
    if (operator=== "+") { 
     num1= num1+num2; 
     nums.splice(i-1, 3, num1); 
    } 
} 

function SrtLoop() { //checks all the numbers 
    for (var i=0; i<nums.length; i++) { 
     if (nums[i]=== "~") { 
      num1=nums[i-1]; 
      num2=nums[i+1]; 
      operator="~"; 
      makeCount(); 
     } 
     if (nums[i]=== "+") { 
      num1= nums[i-1]; 
      num2= nums[i+1]; 
      operator="+"; 
      makeCount(); 
     } 
    } 
} 

SrtLoop(); 
res=num1; 

私は機能せず、ループのために置くが、プログラムが演算子を確認した後、私は、実現する前に、それが再びチェックしません。だから私は、関数の中にforループを置くと思った、私は一度それを呼び出すだろうとカウントをした後、再びforループ関数を呼び出すだろう。関数res = undefined(expected)を呼び出さずに、res = 10(expected)関数を呼び出すことなく、関数を呼び出すと、すべてのコードが破棄され、画面に何も表示されません。

注:私の英語が悪い

+2

あなたは、デバッグしようとしたことがありますか? – ElGavilan

+1

[JavaScriptのデバッグ方法](https://developers.google.com/web/tools/chrome-devtools/debug/) –

+0

@Alex:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#(Bitwise_NOT)...しかしOPの問題にどのように関連しているのか分かりません。 –

答えて

1

あなたmakeCount機能は一切iへの参照を持っていない場合、私はここに新しいして申し訳ありません。あなたはグローバル変数としてiを宣言していませんが(これは素晴らしい方法ではありません)。また、makeCount関数の引数として渡していません。

var res=0, operator, pattern, num1, num2 
myText= "2~3+2" 
pattern= /([\+\-\*\~\V/])/; 
var nums= myText.split(pattern); 

function makeCount(i) { 
    num1= Number(num1); 
    num2= Number(num2); 

    if (operator=== "~") { 
     num1= Math.pow(num1,num2); 
     nums.splice(i-1, 3, num1); 
    } 
    if (operator=== "+") { 
     num1= num1+num2; 
     nums.splice(i-1, 3, num1); 
    } 
} 

function SrtLoop() { //checks all the numbers 
    for (var i=0; i<nums.length; i++) { 
     if (nums[i]=== "~") { 
      num1=nums[i-1]; 
      num2=nums[i+1]; 
      operator="~"; 
      makeCount(i); 
     } 
     if (nums[i]=== "+") { 
      num1= nums[i-1]; 
      num2= nums[i+1]; 
      operator="+"; 
      makeCount(i); 
     } 
    } 
} 

SrtLoop(); 
res=num1; 

フィドルを参照してください:https://jsfiddle.net/0f2yrxgu/

私は本当にあなたがここで何をしているのか理解していないとして、それが何かを記録しません。しかし、エラーはなくなりました。

0

変数iは、関数makeCount()では未定義です。次のように変更します。次のように

function makeCount(i) { 
    //Your code 
} 

は、呼び出しを変更します。

makeCount(i); 
関連する問題