无法在JavaScript中调用该函数

时间:2016-05-17 18:34:04

标签: javascript

我正在制作一个计算器,用文字输入书写。为了测试代码,我只是编了一个随机数和一些“ifs”。这是代码:

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(expected),但调用函数会破坏所有代码并且屏幕上没有任何内容。

注意:我是新来的,对不起,如果我的英语不好

2 个答案:

答案 0 :(得分: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/

它没有记录任何东西,因为我真的不明白你在这里做什么。但是,错误消失了。

答案 1 :(得分:0)

变量i在函数makeCount()中未定义。修改如下:

function makeCount(i) {
   //Your code
}

按如下方式修改呼叫:

makeCount(i);