Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Почему бывает утечка у arguments

#javascript #v8


Приветствую.
Наткнулся на интересную статью о плохих практиках для оптимизации кода в JS движках.
Заинтересовало почему течёт arguments при описанных случаях и почему Function#apply
- исключение.
Особенно интересно почему будет утечка при Array#slice, ведь при передаче примитивов
будет возвращена никак не связанная копия.
Благодарю за внимание.
    


Ответы

Ответ 1



При чем тут утечка, если статья про "убийц оптимизации"? На самом деле все просто. function foo(x, y, z) { bar(arguments); console.log(x, y, z); } foo(1, 2); Давайте поиграем в игру. Вы - компилятор js. Чему будут равны переменные x, y и z в конце? Без функции bar узнать этого не получится. Теперь еще одна задачка: function bar(a) { a[0] = 6; a[1] = 7; a[2] = 8; } function foo(x, y, z) { bar(arguments); console.log(x, y, z); } Что теперь можно сказать? Вывод на консоль все еще не определен! Объект arguments делает функцию очень сложной для компиляции - для того, чтобы узнать хоть что-то, надо копать очень глубоко. Поэтому проще даже не пытаться оптимизировать такие функции. Решение же, на самом деле, куда проще чем написано в той статье. "use strict"

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

Отправить комментарий