Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вопрос про анонимную функцию (https://javascript.ru/forum/misc/29185-vopros-pro-anonimnuyu-funkciyu.html)

noname1990 18.06.2012 23:07

вопрос про анонимную функцию
 
var Controller = {};
(Controller.user = function($)
{
/ * какой-то код */
})(jQuery);
В книге написано, что используется анонимная функция для инкапсулирования области действия и предотвращения загрязнения глобальной области действия.
вопрос такой, зачем ее засовывать в анонимную функцию, если все что находится внутри Controller.user находится в области деятсвия объекта Controller? т.е по идее глобальный объект не зосорится.... объясните пожалуйста великие гуру)

dmitriymar 18.06.2012 23:23

вы неправильную книжку читаете.
вы вызываете анонимную в контесте джиквери для расширения библиотеки. объект незачем-если речь идёт о расширении джиквери,а в остальном -хрен его знает какие тараканы в голове у автора книги,мои с ними симпозиум по обмену опытом не устраивали :)

noname1990 18.06.2012 23:42

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 182406)
ни че не понял че за бред написал в виде "кода", но короче в функции оборачивают что-то чтобы создавать там переменные и они не были видны в глобальной области видимости.

(function(){
var q = 11;
})()

q // undefined

Сорри, забыл вставить в "код".
Это понятно, просто не понятно почему он оборачивает Controller.user, а не сам Controller.
(function(){
var Controller = {};
Controller.user = ...
})()

noname1990 19.06.2012 09:38

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 182446)
ты что слепой? вторая строчка

ты спокойнее будь, не обязательн так отвечать

melky 19.06.2012 11:19

Цитата:

Сообщение от noname1990
var Controller = {};
(Controller.user = function($)
{
/ * какой-то код */
})(jQuery);

В книге написано, что используется анонимная функция для инкапсулирования области действия и предотвращения загрязнения глобальной области действия.

я видел пару раз такой код, и он вызывал у меня злость. ну да ладно.

обычно при присваивании правая часть выражения должна вернуть какой-то результат. Иногда этот результат может быть известным - статичным, или же описываться быстрым, решительным тернарным оператором, а иногда для выпендрёжа могут и анонимную функцию подставить.

зачем это делать? а всё просто. такая конструкция используется в шаблоне "модуль" (с нек-и его изменениями, но суть та же). в функции происходит магия, и в конце концов из желудей и спичек ваяется объект\метод\свойство и этим же расширяется объект.

для большего просветления, можно написать псевдокод:
var Controller = {};
Controller.user = (function($) {
    var private; // приват.
    return { readOnly: private }
})(jQuery);


и тут я заметил одно ... скобка та не там стоит. ТС написал текстом одно, а в коде другое совершенно

var Controller = {};
(Controller.user = function($)
{
/ * какой-то код */
})(jQuery);

// ----> 
var Controller = {};
(Controller.user = function($) {/ * какой-то код */ })(jQuery);

здесь вообще просто вызывается функция, которая записалась как метод Controller.
КОд аналогичен следующему:
var Controller = {};
Controller.user = function($) {/ * какой-то код */ };
Controller.user(jQuery);

dmitriymar 19.06.2012 11:28

noname1990,
вы не находите ,что разница между первым и втором вариантами одного кода из книжки глобальная?

noname1990 19.06.2012 11:37

второй вариант это мой, я просто спросил почему нельзя сделать так, т.е обернуть весь Controller.


Часовой пояс GMT +3, время: 15:44.