Значения массива JavaScript превратились в неопределенные при отсутствии отладки в IE11

#javascript #arrays #internet-explorer

#javascript #массивы #internet-explorer

Вопрос:

Я написал очень простую функцию разделения на JavaScript:

 Array.prototype.partition = function (size, step) {
    var out = [];

    for (var i = 0; i < this.length - size; i  = step) {
        var tmp = this.slice(i, i   size);
        //two lines below were for quick debug
        //console.log(tmp);
        //console.log(out);
        out.push(tmp);
    }

    return out;
};
  

Пример использования:

 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(arr);
console.log(arr.partition(2, 1));
  

При запуске в последней версии Firefox он работает так, как ожидалось:

 [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]]
  

Однако у меня с этим большие проблемы в IE11.
Если я запускаю этот скрипт без каких-либо точек останова в упомянутой функции, кажется, что все значения в возвращаемом массиве «неопределенные»:
Нет точек останова

Однако, если я установил хотя бы одну точку останова внутри функции (в IE debugger), и она приостанавливается внутри функции в этой точке, все кажется прекрасным: Точки останова

Очень странно, однако, что результаты находятся на разных стадиях. Как вы можете видеть без точек останова, оба журнала находятся в одном и том же разделе «Произошла навигация» (что бы это ни было). В то время как при использовании точек останова и отладки они находятся в двух отдельных точках.
Есть идеи, что здесь происходит? Это какая-то ошибка IE? Спасибо за вашу помощь.

—РЕДАКТИРОВАТЬ—
Только что понял, что, несмотря на то, что эти значения регистрируются в консоли как неопределенные, на самом деле это не так, и их все еще можно использовать в другом месте. Мне кажется, что это проблема с протоколированием…

Комментарии:

1. Я не могу воспроизвести проблему в моем локальном IE11, она работает так, как ожидалось. Я создал тест на jsbin: jsbin.com/xadoxoda/1/edit

2. если вы вставите его в простой HTML-файл и запустите, вы увидите ту же проблему. для меня jsbin тоже выглядит нормально.

3. Для меня симптомы звучат как какое-то состояние гонки, так как что-то не определено до нескольких миллисекунд после попытки вычисления.

4. arr Находится в глобальной области видимости? Если нет, массивы, вероятно, являются мусором, собранным до того, как вы развернете их в консоли. Консоль Chrome ведет себя аналогично.

5. Массивы находятся в теге script в заголовке HTML-файла, не уверен, что это считается глобальной областью. Это то, о чем я тоже думал, они просто собирают мусор в4, который я расширяю. Особенно, если я выполняю итерацию по созданному (разделенному) массиву и регистрирую каждый отдельный элемент, они в порядке, но сам массив по-прежнему полон неопределенных.