Javascript “如何修复”;停止运行此脚本?";注意这个代码?

Javascript “如何修复”;停止运行此脚本?";注意这个代码?,javascript,devexpress,Javascript,Devexpress,运行此代码时,会显示警报filtereditem是DevExpress列表框控件。 existingItems是一个包含247项的数组 function GetMessage(){ var deletedItems = ''; var count = existingItems.length; for (var i = 0; i < count; i++) { var item = existingItems[i].text; if

运行此代码时,会显示警报
filtereditem
是DevExpress列表框控件。 existingItems是一个包含247项的数组

function GetMessage(){
    var deletedItems = '';
    var count = existingItems.length;
    for (var i = 0; i < count; i++) {
        var item = existingItems[i].text;
        if (!filtereditem.FindItemByText(item)) {
            if (deletedItems != '') {
                deletedItems = deletedItems + ', ' + item;
            }
            else {
                deletedItems = item;
            }
        }
    }
    return deletedItems;
}
函数GetMessage(){ var deletedItems=''; var count=existingItems.length; 对于(变量i=0;i通常会触发“停止运行此脚本?”警报,因为某些脚本代码需要很长时间才能执行

假设警报是通过调用您提供代码的
GetMessage
函数触发的,我可以给您以下建议:

此函数中有一个
for
循环。这可能需要很长时间,有三个明显的原因

1) 循环的每次迭代都可能需要很长时间

2) 可能有太多的迭代,因此即使每个迭代只需要很短的时间,整个循环也需要很长的时间来执行

3) 这可能是因为,尽管循环的大多数迭代只需要很短的时间来执行,但循环变量
i
中可能存在某些值,循环中的代码会冻结或花费很长时间


您可以使用JavaScript
getTime()
方法帮助自己确定您正在处理这三种情况中的哪一种

感谢大家提出的宝贵建议


我能够解决这个问题,问题是使用FindItemByText()方法,我用FindItemByValue()替换它,现在它工作正常。

计数有多大?
FindItemByText()
在做什么?FindItemByText()是由devexpress的listbox控件公开的客户端方法,用于检查文本的存在。听起来脚本运行的时间太长了,你能用jScript调试器来看看为什么循环的每次迭代都要花这么长的时间吗,247循环不是大量的迭代,但是如果FindItemByText非常密集,那么这可能就是问题所在。对于长时间运行的循环,通常的解决方案是使用
setTimeout()
重新构造代码,并回调基于超时的“循环”可能相关:您用于收集deletedItems的过程可能是二次时间,假设字符串连接是以标准方式实现的。使用数组并使用其联接方法,而不是逐段字符串连接。例如:[“你好”,“世界”].加入(“,”)