javascript函数崩溃了我的浏览器

时间:2014-11-27 05:48:28

标签: javascript html browser

我编写了一个简单的程序,它采用2个textareas并将一个textarea的每一行与第二个textarea中的所有行组合在一起,我的浏览器在6000行后粉碎。 我的检查结果需要达到100,000行。

这是javascript代码:

function go() {
    var lines1 = $('#text1').val().split(/\n/);
    var lines2 = $('#text2').val().split(/\n/);
    var textarea1 = [];
    var textarea2 = [];
    var textarea3 = [];
    for (var i = 0; i < lines1.length; i++) {
        if (/\S/.test(lines1[i])) {
            textarea1.push($.trim(lines1[i]));
        }
    }
    for (var j = 0; j < lines2.length; j++) {
        if (/\S/.test(lines2[j])) {
            textarea2.push($.trim(lines2[j]));
        }
    }
    for (var k = 0; k < lines1.length; k++) {
        for (var q = 0; q < lines2.length; q++) {
            textarea3.push($.trim(lines1[k] + ' ' + lines2[q]));
            var msg = textarea3.join("\n");
            document.getElementById('text3').value = msg;
        }
    }
}

这是HTML:

<textarea name="textarea" id="text1"></textarea>
<textarea name="textarea" id="text2"></textarea>
<input type="button" value="GO!" onclick="go()">
<br />
<textarea name="textarea" id="text3"></textarea>

2 个答案:

答案 0 :(得分:2)

问题在于此代码

    for (var k=0; k < lines1.length ; k++) {
        for (var q=0; q < lines2.length ; q++) {
            textarea3.push($.trim(lines1[k] + ' ' + lines2[q]));
            var msg = textarea3.join("\n");
            document.getElementById('text3').value = msg;
        }
    }

如果textarea1中有1K行,testarea2中有1K,那么您将修改DOM(通过更改textarea3的值)1M次,这是疯狂的。因此,不是每次尝试在循环外执行它而更新DOM。

答案 1 :(得分:0)

尝试在textarea中提供maxlength属性,然后检查我认为它会起作用。 的

并在你的for循环中首先将所有内容存储在一个变量中然后在for循环中将其写入textarea而不是每次在for循环中分配DOM值。