Сообщение от 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