2016-05-17 37 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);