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

Сообщение от Volk_88
Что касается данного выражения, думаю это было сделано из учета обращения к глобальному объекту в коде фреймворка, где this - не является глобальным объектом
Да, если процент обращения к window в контекстах, где this не равен глобальному объекту большой, то это является оптимизацией. Но, тогда, идеологически верно было бы var window = window, что я и отметил, поскольку есть разница между window и глобальным объектом.

Сообщение от Volk_88
а вот this уже на jQuery (или я не прав? =) )
Прав, но вообще, зависит от выражения вызова и this определяется каждый раз при вызове, поэтому и этот метод extend можно вызвать так, где this будет не jQuery.

Сообщение от Volk_88
но вот я так и не понял, для чего реализована функция noConflict
Чтобы иметь возможность восстановить затёртые идентификаторы $ и jQuery (теоретически и практически, пользователь может использовать несколько фреймворков; noConflict позволит использовать $, например, из Prototype.js, а имя jQuery - из jQuery; также, там предусмотрен глубокий вариант восстановления, где восстанавливается и имя jQuery).

Сообщение от Volk_88
а на сколько бы изменение в первом примере window на this дало бы выигрыш
Здесь надо почитать про разрешение имён идентификаторов и цепь областей видимости.

Любой идентификатор разрешается - определяется, к какой области видимости в иерархической цепи, он относится. Это делается каждый раз при обращении к имени переменной. Соответственно, чем глубже контекст исполнения, тем дольше будет разрешаться идентификатор, определённый в более высоких контекстах исполнения (например, глобальном контексте).

(function () {
  (function () {
    (function () {
      alert([this, window]);
    })();
  })();
})();


Здесь, чтобы разрешить имя window нужно просмотреть scope chain (цепь областей видимости) из самого глубокого контекста исполнения - и вверх по цепи, т.е. 4 звена цепи.

В свою очередь, this, как уже было отмечено, никогда не разрешается, он определён один раз при входе в контекст. Поэтому в alert-e из примера выше значение this будет получено сразу - в отличие от window.

Однако, поскольку window - это host-объект, его разрешение (и вообще поведение) может зависеть от реализации.

Подробней про scope chain: http://javascript.ru/blog/Dmitry-A.-...j-vidimosti.-0
__________________
Тонкости ECMAScript

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