Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Экранирование, глобальных переменных
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 23 дня
Карма: 13




Привет, друзья!

Видел такую конструкцию для предотвращения засирания глобального пространства:

(function(){
//some code
}).call(this);


Как в таком случае работать с jQuery? В данном случае контекст this это и есть вся требуха из глобального пространства?

А если я внутри напишу еще вот так:

(function(){
//some code
var func;
func = (function(){
//some another code
}).apply(this);
}).call(this);


Как этой конструкцией пользоваться и нафига это вообще чего такое-то? Туда по apply уже попадет this, который являет собой область внешнего враппера? А враппер запускается в конексте глобального пространства, у меня в func прилетит контекст чего?



--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Loki  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 42297
На форуме: 11 месяцев, 9 дней
Карма: -2




Цитата (Ron @ 24.12.2015 - 22:12)
Экранирование, глобальных переменных

WUT?

Цитата (Ron @ 24.12.2015 - 22:12)
В данном случае контекст this это и есть вся требуха из глобального пространства?

В браузере это будет объект Window.

Цитата (Ron @ 24.12.2015 - 22:12)
область внешнего враппера

WUT?

Цитата (Ron @ 24.12.2015 - 22:12)
Как в таком случае работать с jQuery?

В данном случае - точно так же как и без анонимной функции.

Пример для размышлений:
(function ($) {
$('selector').someFunction();
})(jQuery);


Это сообщение отредактировал Loki - 24.12.2015 - 22:40
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 23 дня
Карма: 13




Цитата (Loki @ 24.12.2015 - 22:39)
WUT?

так было сформулированно в том источнике, где я это всё брал. Я сам не знаю что это означает. wink.gif

Все-таки для чего существуют подобные конструкции? Вижу что пользоваться не слишком удобно. В такую функцию по дефолту заворачивает компилятор CofeeScript.

P.s. То что Cofee мне изучать еще очень рано я уже понял. biggrin.gif




--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Loki  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 42297
На форуме: 11 месяцев, 9 дней
Карма: -2




Цитата (Ron @ 25.12.2015 - 01:06)
Все-таки для чего существуют подобные конструкции?

Например для
Цитата (Ron @ 24.12.2015 - 22:12)
предотвращения засирания глобального пространства

Это обычная анонимная функция. Локальные переменные в ней остаются в scope этой функции и не попадают выше.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 23 дня
Карма: 13




Цитата (Loki @ 25.12.2015 - 09:26)

Это обычная анонимная функция. Локальные переменные в ней остаются в scope этой функции и не попадают выше.

А как туда jQuery попадет, придется его вот так вот передавать через call? Я заводил просто функции произвольные и там jQ работал почему-то. Без дополнительных плясок.


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Loki  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 42297
На форуме: 11 месяцев, 9 дней
Карма: -2




Цитата (Ron @ 25.12.2015 - 09:43)
Цитата (Loki @ 25.12.2015 - 09:26)

Это обычная анонимная функция. Локальные переменные в ней остаются в scope этой функции и не попадают выше.

А как туда jQuery попадет, придется его вот так вот передавать через call? Я заводил просто функции произвольные и там jQ работал почему-то. Без дополнительных плясок.

Потому что замыкание. В php для этого прийдется использовать ключевое слово use, в javascript оно не нужно.
Можно также передавать через аргументы, как в моём примере выше.

Это сообщение отредактировал Loki - 25.12.2015 - 09:53
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 23 дня
Карма: 13




Цитата (Loki @ 24.12.2015 - 22:39)
Пример для размышлений:

Я поразмыслил над примером. Непонятно для чего такая конструкция, когда JS будет искать $ вне функции по цепочке видимости.

Можно с тем же результатом просто юзать так:
(function () {
$('selector').someFunction();
})();

.call(this) мы просто зачем-то запускаем функцию в контексте window, на который по дефолту и ссылается this в браузерном global scope (коим является лишь условно). Apply тоже самое, только в аргументах идет array. Отилчается bind, но не знаю где его юзать, на фронтенде слабо себе представляю натстолько сложный код.

Правильные мысли?



--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 23 дня
Карма: 13




Хорошо, вот другой пример:
$('.class').on(...);

Получается $ название функции, которая вообще-то jQuery, но сделан либо алиас, либо ХЗ как - не суть важно. Мы вызываем как обычно, передаем параметр, далее по цепочке навешиваем listner или делаем неважно что - всё збс.

Вот это что?
$.ajax(...)

Я представляю себе данную ситуацию примерно следующим образом
var $ = function(selector){
...
this.ajax = function(parameters){};
...
};

Правильно? Или там принципиально совсем иначе сделано? Нет скила для самостоятельного изучения кода библиотеки, поэтому и спрашиваю.




--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса