[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Экранирование
Ron
Привет, друзья!

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

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


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

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

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


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

Loki
Цитата (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);


_____________
Она утонула
СМИ независимы
У нас нет дворцов
В мешках был сахар
Сердюков не виноват
Я не знаю свою зарплату
Правду, я говорю правду
Я не знаю зарплату Сечина
Наших войск в Украине нет
Ахмат Кадыров - герой России
Санкции нам только на пользу
Мы будем стоять за спинами детей
Я 15 лет недоволен ценами на бензин
От падения рубля доходы России только увеличились
ПРОШУ ВАС ОТНЕСТИСЬ К ЭТОМУ С ПОНИМАНИЕМ
Ron
Цитата (Loki @ 24.12.2015 - 22:39)
WUT?

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

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

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


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

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

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

_____________
Она утонула
СМИ независимы
У нас нет дворцов
В мешках был сахар
Сердюков не виноват
Я не знаю свою зарплату
Правду, я говорю правду
Я не знаю зарплату Сечина
Наших войск в Украине нет
Ахмат Кадыров - герой России
Санкции нам только на пользу
Мы будем стоять за спинами детей
Я 15 лет недоволен ценами на бензин
От падения рубля доходы России только увеличились
ПРОШУ ВАС ОТНЕСТИСЬ К ЭТОМУ С ПОНИМАНИЕМ
Ron
Цитата (Loki @ 25.12.2015 - 09:26)

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

А как туда jQuery попадет, придется его вот так вот передавать через call? Я заводил просто функции произвольные и там jQ работал почему-то. Без дополнительных плясок.
Loki
Цитата (Ron @ 25.12.2015 - 09:43)
Цитата (Loki @ 25.12.2015 - 09:26)

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

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

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

_____________
Она утонула
СМИ независимы
У нас нет дворцов
В мешках был сахар
Сердюков не виноват
Я не знаю свою зарплату
Правду, я говорю правду
Я не знаю зарплату Сечина
Наших войск в Украине нет
Ахмат Кадыров - герой России
Санкции нам только на пользу
Мы будем стоять за спинами детей
Я 15 лет недоволен ценами на бензин
От падения рубля доходы России только увеличились
ПРОШУ ВАС ОТНЕСТИСЬ К ЭТОМУ С ПОНИМАНИЕМ
Ron
Цитата (Loki @ 24.12.2015 - 22:39)
Пример для размышлений:

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

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

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

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

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

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

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

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

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


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.