4

JQuery で実行される構文ハイライターに取り組んでいるときに、かなり奇妙な問題を発見しました。私が作成した関数は、配置されているループをほとんど破損しているように見えます。ただし、ループの外では、完全に正常に動作します。

問題の関数は次のとおりです。

function findQuoted(s)
{
    var Quote = 0;
    var F = 0;
    var L = 0;
    var Strings = Array();
    for(i = 0;i < s.length;i++)
    {
        if(s.charAt(i) == '"' && Quote == 0)
        {
            Quote = 1;
            F = i;
        }
        else if(s.charAt(i) == '"' && Quote == 1)
        {
            Strings[Strings.length] = s.substring(F, i + 1);
            Quote = 0;
        }
    }
    return Strings;
}

http://pastebin.com/2wi4Tnn8

これが任意のループで実行されると、奇妙な理由でループが機能しなくなり、1 回だけ実行されます。

この例では、プログラムを続行する前に警告メッセージがそれぞれ 1 回だけ表示されます。プログラムがスタックしたり応答しなくなったりすることはなく、ループが機能しなくなることを覚えておいてください。

for(i = 0;i < 5;i++)
{
    alert(findQuoted('"Test" this is a test "test" another test "TEST"'));
    alert('test');
}

通常のシナリオでは、この関数を使用しないと、このループ内のすべてが 6 回実行されます。ただし、この関数がループ内に存在するため、この関数内のすべてが 1 回しか実行されません。

4

1 に答える 1