使用for循环的函数调用循环数组不工作,请帮助

时间:2015-03-19 23:07:03

标签: javascript arrays function for-loop dynamic

我对Javascript很新,但我有一个问题,我整天都在努力研究和解决,比如自己做,但我很困难。

我的代码很简单,我创建了5个函数,1个字母测试,1个数字测试,1个用于开放式括号,1个用于封闭式括号,第五个用于完整停止。这些函数返回true。

然后我创建了一个函数来调用所有这些函数,以便根据文本字符串中的内容生成数字输出。

回到顶端,我有一个字符串,我使用split创建了一个数组,将字符串中的每个字符放入数组中的单独地址。我的想法是使用for循环滚动数组并将类型输出到identity中,然后在列表中输出。

问题是它会循环一次然后崩溃,我无法找到问题,问题在于:

identity = isWhat(ModCompound[x],ModCompound[y]);

用//删除它,for循环运行正常。

我想知道为什么?这是什么错误?

代码:(原始表格)

    <!DOCTYPE html>
<!--
Sjb 19/03/2015
-->
<html>
    <head>
        <title></title>
    </head>
    <body>

        Chemicals
</br>

    Compound: <input id="compound" value="NaCl.2(H20)">


<script>
    var identity;
    var x;
    Compound = document.getElementById('compound').value;

    ModCompound = Compound;
    ModCompound = ModCompound.split('');

    for (i = 0; i < Compound.length; i++){
        x = i;
        y = i;
        document.write(i);
        identity = isWhat(ModCompound[x],ModCompound[y]);

        document.write(Math.random() + "   : " + identity + "</p>");

    }    

      ModCompound= ModCompound.join('');

    // Custom Functions
        function isWhat(n1,c1)                        //OUTPUT 1,2,9,0,8
        {
            if (isLetter(n1,c1) === true) {          
                return isWhat = 1;
                //document.write = "L";
            }           //OUTPUT 1
            if (isNumber(n1,c1) === true) {           
                return isWhat = 2;
                //document.write = "N";
            }           //OUTPUT 2
            if (isOpenBracket(n1,c1) === true){       
                return isWhat = 9;
                //document.write("OB");
            }       //OUTPUT 9
            if (isClosedBracket(n1,c1) === true) {    
                return isWhat = 0;
                //document.write = "CB";
            }    //OUTPUT 0
            if (isFullStop(n1,c1) === true) {         
                return isWhat = 8;
                //document.write = "FS";

        }         //OUTPUT 8
        }

        function isNumber(n, c)                     //OUTPUT(s) TRUE
        {
          if (n >= 0 || n <= 9 ) {
          //document.write(n + "   N   " + c + "</p>");
          return isNumber = true;
        }  
    } 
        function isLetter(n, c)
        {
          n = n.charCodeAt(0);
          if (((n >= 65) && (n <= 90)) || ((n >= 97) && (n <= 122))) { 
          //document.write(n + "   L   " + c + "</p>");
          return isLetter = true;
        }  
    } 
        function isOpenBracket(n,c)
        {
          if (n === "(")  {
          //document.write(n + "   OB   " + c + "</p>");
          return isOpenBracket = true;
        }  
    }
        function isClosedBracket(n,c)
        {
          if (n === ")")  {
          //document.write(n + "   CB   " + c + "</p>");
          return isClosedBracket = true;
        }  
    }
        function isFullStop(n,c)
        {
          if (n === ".")  {
          //document.write(n + "   F   " + c + "</p>");
          return isFullStop = true;
        }  
    }



  </script>

    </body>
</html>

1 个答案:

答案 0 :(得分:0)

您的退货声明应该是这样的:

return 1;

你写的是:

return isWhat = 1;

这是将变量isWhat设置为1,然后将其返回。 isWhat是一个函数,因此设置为1使得你无法调用它(因为现在它是一个数字,而不是一个函数)。此外,无需键入var===true,因为如果变量为true,则var将评估为true并且if语句将运行。