Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Пространство имет js

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Prizma
Отправлено: 28 Марта, 2014 - 07:27:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




В JS популярная конструкция ()(function(){})
допустим возьмем тот же jquery:
CODE (javascript):
скопировать код в буфер обмена
  1. (function(a,b){function cy(a){r ....
  2. ... return f})})(window);

т.е. сам код сидит в обёртке (код)(аргументы); А как наприме обратится к функции cy()?

я уже статей 5 посвященных этой теме прочитал но недогоняю не как... как же из такой обёртки вызывать методы функции и т.д.? вот например вот тут всё ясно(я делаю так):
CODE (javascript):
скопировать код в буфер обмена
  1. var myClass = {
  2. методы, переменные
  3. }

а как обратится к тому анонимному объекту(функции/пространству имен) я понять так и не смог(

(Отредактировано автором: 28 Марта, 2014 - 07:28:21)

 
My status
 Top
Ch_chov
Отправлено: 28 Марта, 2014 - 08:42:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. var foo = (function() {
  2.   var bar = function() {}
  3.   return bar;
  4. })()
  5.  
  6. foo();

Prizma пишет:
как же из такой обёртки вызывать методы функции и т.д.?

Если вы не используете замыкания, то вам эти "обёртки" и ну нужны. Пользуйтесь обычными функциями и методами.

(Отредактировано автором: 28 Марта, 2014 - 08:42:57)

 
 Top
and_07
Отправлено: 28 Марта, 2014 - 08:45:14
Post Id


Гость


Покинул форум
Сообщений всего: 91
Дата рег-ции: Сент. 2012  


Помог: 3 раз(а)




как то так
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var test =(function(){
  3. return {
  4. fn1:function(){alert('sdf');}
  5. }
  6. })();
  7. test.fn1()
  8. ;


не успел (

(Отредактировано автором: 28 Марта, 2014 - 08:46:22)

 
 Top
Prizma
Отправлено: 28 Марта, 2014 - 09:37:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




Ch_chov пишет:
Если вы не используете замыкания, то вам эти "обёртки" и ну нужны. Пользуйтесь обычными функциями и методами.

так вот именно про замыкание узнать и хотел, спасибо за ответ и приведенный пример, но такой вариант не чем не отличается(я не вижу отличия) от:
CODE (javascript):
скопировать код в буфер обмена
  1. var foo = function(){
  2.    var bar = function(){...}
  3.    return bar;
  4. }

Можно узнать чем метод с "обёрткой" (...)() лучше этого примера?
(Добавление)
В целом разобрался прочитав и осмыслив вот эту статью http://javascript[dot]ru/basic/closure про замыкания. Мне стало ясно в всё в тот момент когда я понял что конструкция канет в не куда сразу как интерпритатор дойдет до неё(точнее не одна переменная не будет доступная больше нам и мы некогда не сможем вызвать некую анонимную функцию сокрытую в обёртке:
CODE (javascript):
скопировать код в буфер обмена
  1. (
  2.  function(a){
  3.   return function(b){
  4.    alert(a+b);
  5.   }
  6.  }
  7. )

но всего лишь добавив () мы можем вызвать эту фукцию, и если где то в ней будет использоваться замыкание, тогда они(замыкания сделанные нами) будут доступны нам и далее.
CODE (javascript):
скопировать код в буфер обмена
  1. (
  2.  function(a){
  3.   return function(b){
  4.    alert(a+b);
  5.   }
  6.  }
  7. )('Добрый')('День'); //выведет "Добрый День" в момент когда интопретатор дойдет до этого фрагмента кода


спасибо что напомнили про замыкания
 
My status
 Top
and_07
Отправлено: 28 Марта, 2014 - 11:25:34
Post Id


Гость


Покинул форум
Сообщений всего: 91
Дата рег-ции: Сент. 2012  


Помог: 3 раз(а)




 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB