2016-05-17 107 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循環放在一個函數中,我會調用它一次,並在計數後再次調用for循環函數。結果是,沒有函數,最後,res = 10(預期),該函數沒有調用它,res = undefined(預期),但調用該函數將破壞所有代碼並且屏幕上不顯示任何內容。

注:我在這裏新和抱歉,如果我的英語不好

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