Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / В чем основная фича делать так, как например это реализовано в jQuery? / 12 сообщений из 12, страница 1 из 1
15.12.2012, 23:49
    #38080790
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
Всем привет.
Заметил, что например в той же jQuery все плагины и сам jQuery пишется так:

Код: javascript
1.
2.
3.
4.
5.
(function( window, undefined ) {
   var a, b, ...
   // далее весь код библиотеки располагается тут
   ...
})(window);



Я так понимаю, тут как то через замыкание в глобальном объекте window создаются все переменные jQuery.

Зачем так делать? В чем разница между обычным подходом, когда просто создаются глобальные переменные и классы:

var a, b, ...;

..

Есть ли по этому поводу какой-либо best practices?
...
Рейтинг: 0 / 0
15.12.2012, 23:57
    #38080796
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
у Стефанова что-то есть на эту тему... не помню точно, вроде он пишет что так быстрее... почитайте в общем
...
Рейтинг: 0 / 0
15.12.2012, 23:57
    #38080798
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
Код: javascript
1.
2.
3.
4.
(function() 
{

})();



Вот так делают для того, чтобы объявить функцию без имени и тут же ее выполнить. Т.к. имени нет, больше повторно ее никто случайно не запустит. В функцию нужно оборачивать, чтобы ограничить область видимости тех переменных, к которым доступ не требуется. Соответственно для создания глобальных переменных внутри функции можно и без явного указания window обойтись, но лучше приписывать. а передается параметром этот самый window скорее для гибкости. Чтобы при необходимости можно было бы передать иной объект. Если плагин глобальный и совесть не мешает замусоривать window, то разумеется нет необходимости передавать его параметром, т.к. его имя на данный момент "стандартно".
...
Рейтинг: 0 / 0
15.12.2012, 23:57
    #38080799
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
unicornmirageВ чем разница между обычным подходом, когда просто создаются глобальные переменные и классы:

var a, b, ...;а и b не засоряют глобальную область, инкапсулируются внутри функции.
...
Рейтинг: 0 / 0
16.12.2012, 00:02
    #38080806
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
Зачем с "undefined" так делают - не очень понятно. Видимо, раньше в каких-то браузерах такого объекта не было, и обращение к нему вызывало ошибку.
...
Рейтинг: 0 / 0
16.12.2012, 09:02
    #38080893
Pochemuchkin2011
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
Яростный Меч,

Возможно, чтобы получить настоящий undefined, если вдруг его переопределил кто-то?
...
Рейтинг: 0 / 0
16.12.2012, 18:50
    #38081120
12121211212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
и window и undefined пробрасываются - чтобы при сжатии компрессором жалось лучше
...
Рейтинг: 0 / 0
16.12.2012, 22:22
    #38081237
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
12121211212и window и undefined пробрасываются - чтобы при сжатии компрессором жалось лучше

с undefined понятно - он сожмется,
в связи с этим вопрос - а это следует применять только лишь там, где в коде много undefined.

но зачем сжимать window - если его можно просто не использовать.
...
Рейтинг: 0 / 0
16.12.2012, 22:53
    #38081256
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
unicornmirageно зачем сжимать window - если его можно просто не использовать.
Правила хорошего тона - использовать.

P.S.: А компрессорного фанатизма в условиях HTTP 1.1 никогда не понимал.
...
Рейтинг: 0 / 0
16.12.2012, 23:11
    #38081275
12121211212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
unicornmirage
с undefined понятно - он сожмется,
в связи с этим вопрос - а это следует применять только лишь там, где в коде много undefined.

up to you

unicornmirageно зачем сжимать window - если его можно просто не использовать.
зависит от того, что вы разрабатываете, можно и не использовать.
но, к примеру, window.addEventListener выглядит несколько более читабельным чем addEventListener,

да и замокать при случае можно, тоже может быть полезно.
...
Рейтинг: 0 / 0
17.12.2012, 10:43
    #38081554
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
Ок, многие рекомендуют инициализировать все свои объекты в своем namespace.
Вот есть к примеру такое замыкание:

window.myNamespace = window.myNamespace || {};
Код: javascript
1.
2.
3.
4.
5.
6.
(function() 
{
    // .. что то делаем

    myNamespace.someClass = ...; // создаем собственный "класс" в своем namespace
})(window.myNamespace);



Анонимная функция при этом отработает один раз, но, она разве не останется висеть в памяти, т.к. через замыкание она удерживается объектом window.myNamespace?
В чем тут эффективность?
...
Рейтинг: 0 / 0
17.12.2012, 15:51
    #38082117
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем основная фича делать так, как например это реализовано в jQuery?
unicornmirageона разве не останется висеть в памяти, т.к. через замыкание она удерживается объектом window.myNamespace?никто никем не удерживается.
код будет таким:

Код: javascript
1.
2.
3.
4.
5.
6.
(function(ns) 
{
    // .. что то делаем

    ns.someClass = ...; // создаем собственный "класс" в своем namespace
})(window.myNamespace);
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / В чем основная фича делать так, как например это реализовано в jQuery? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]