#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"
Комментариев нет:
Отправить комментарий