我正在制作一个计算器,用文字输入书写。为了测试代码,我只是编了一个随机数和一些“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),但调用函数会破坏所有代码并且屏幕上没有任何内容。
注意:我是新来的,对不起,如果我的英语不好
答案 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);