Показать сообщение отдельно
  #5 (permalink)  
Старый 09.01.2010, 16:41
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от sartas
Это из jQuery

Выделить все

var
// Will speed up references to window, and allows munging its name.
window = this,
// Will speed up references to undefined, and allows munging its name.
undefined,
Тот, кто это написал (я не знаю, Резиг или нет) не понимал две важные вещи:

1. Самое главное - если он вызывает в дальнейшем код в контексте this, который был присвоен изначально в локальную переменную window (т.е. глобальный объект), то this - всегда будет работать быстрее, т.к. this не резолвится вообще, он определён единожды при входе в контекст, а вот локальная переменная window будет резолвится всегда при обращении. Так что, здесь имеет место быть явное недопонимание, как и почему "оно" так работает.

2. Есть принципиальная разница между объектом window и глобальным объектом (this в глобальном контексте - есть глобальный объект). Первый - это хост-объект, второй - это нативный объект. Да и не всегда, window - рекурсивная ссылка на глобальный объект; в некоторых реализациях это не так (хотя в стандарте - и в 3-ей, и в 5-ой редакциях это отмечается).

А тут, получается, автор этого кода сохраняет в локальную переменную глобальный объект (т.е. уже меняет поведение, которое было бы у хост-объекта windiow), и, наивно думает, что это что-то ускорит. Наоборот.

Если бы он сделал var window = window, было бы другое дело. А в его случае, удобней было бы всегда использовать this, который был бы определён только один раз, а не постоянно, как window.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 09.01.2010 в 16:46.
Ответить с цитированием