2016-05-17 2 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 = 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); 
Смежные вопросы