代码错误导致浏览器选项卡崩溃

时间:2014-08-21 23:18:12

标签: javascript jquery syntax-error alert

以下是完整转载演示的jsfiddle:

http://jsfiddle.net/gv503cbt/

警告:当您点击"下载"示例上的按钮可能会导致浏览器崩溃/或标签崩溃。

我有

我在alert()函数中添加了convertArrayOfDatesToICSFormat(),似乎不断调用错误的数据:

var byday = convertArrayOfDatesToICSFormat(getArrayOfDates(getCourseDates(data)));
eventIcal += 'RRULE:FREQ=WEEKLY;UNILT=20141129T000000;WKST=SU;BYDAY=' + byday + '\n';

如果你在jsfiddle上测试这个例子,你会注意到在经过一些成功的循环之后警报中的内容开始在' Mon'之间来回传递。和周一,周三'它应该通过其他的。

为什么它会卡在这个位置?通过控制台手动测试功能似乎表明它正常工作。报告没有错误,这让我感到困惑。

最终调用可能的问题函数的代码:

被调用的代码不断循环。

function convertArrayOfDatesToICSFormat(date) {
    alert(date);
    var results = [];
    for (i = 0; i < date.length; ++i) {
        switch (date[i]) {
            case 'Mon':
                results.push('MO');
                break;
            case 'Tues':
                results.push('TU');
                break;
            case 'Wed':
                results.push('WE');
                break;
            case 'Thur':
                results.push('TH');
                break;
            case 'Fri':
                results.push('FR');
                break;
            case 'Sat':
                results.push('SA');
                break;
            case 'Sun':
                results.push('SU');
                break;
            default:
                results.push('Days of the week incorrect');
        }
    }
    return results.join();
}

我被困在这里。

1 个答案:

答案 0 :(得分:3)

你的问题是你的循环变量。您不会在函数中声明变量i,因此它们是全局变量(附加到窗口对象)。您的convertArrayOfDatesToICSFormat函数将此全局变量设置为0,然后将其增加到日期数组的长度。当我们回到createAllEvents时,它不再是您对数据数组所期望的值。你永远不会到达数据数组的末尾,所以你一直走到崩溃浏览器。更改for循环以将变量本地声明为您的函数。例如:

for (var i = 0; i < data.length; ++i) {

甚至:

var i;
for (i = 0; i < data.length; ++i) {

http://jsfiddle.net/gv503cbt/3/