Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что означает подобный код? 
:(
    Опции темы
V0fka
Дата 5.6.2013, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Привет!

Что означает нечто подобное

(function( param1, param2) {
// какой-то код
}
)

?

Когда (в какой момент) отработает функция?
PM MAIL   Вверх
Arantir
Дата 5.6.2013, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Именно этот? Ну, ничего особенного. Эта функция не отработает никогда. Ее даже вызвать невозможно. Не думаю, что применение такой конструкции вообще целесообразно =) 


Вы ни с чем не перепутали? С immediate function, например?
Цитата

(function( param1, param2) {
// какой-то код
}
)()
В этом случае функция вызывается сразу же. Код простой для понимания. В JS все объекты, так что в скобках просто создаем функцию и тут же ее вызываем.
Прием используется, например, для создания локальной области видимости.
Код

var a = 0; // глобалная
(function(window) {
var b = 0; // локальная
}
)(window)


Иногда еще пишут так:
Код

(function(){ 
 
}());
Хотя я, как не профессионал по js, разницы еще не замечал между этими двумя способами, кроме внешнего вида.

Это сообщение отредактировал(а) Arantir - 5.6.2013, 22:51


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
V0fka
Дата 6.6.2013, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Цитата
Именно этот?

Arantir, в связи с убогостью знаний по javascript, думал, что именно этот, но оказалось не так.

То о чем вы написали - это ответ на то, что я хотел спросить smile  . Спасибо! smile 

Это сообщение отредактировал(а) V0fka - 6.6.2013, 15:13
PM MAIL   Вверх
Amphiluke
Дата 6.6.2013, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата (Arantir)
разницы еще не замечал между этими двумя способами, кроме внешнего вида.

Да, вы правы разницы никакой нет. Оператор группировки (т.е. окружающие круглые скобки) — в данном случае ничто иное, как способ указания интерпретатору, что это является не декларацией функции, а функцией-выражением. Для этого необходимо поставить эту функцию в позицию, где ожидается именно выражение, например, на место операнда оператора группировки. Скобки в действительности — лишь частный случай, а на самом деле сгодится и какой-нибудь другой оператор, лишь бы функция стояла в позиции выражения. Например, это тоже будет работать (хотя и выглядит несколько более запутывающе):

Код

+function (arg) { alert(arg); }(1);
!function (arg) { alert(arg); }(1);
1,function (arg) { alert(arg); }(1);


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM   Вверх
bems
Дата 9.6.2013, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



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


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Arantir
Дата 9.6.2013, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Цитата(bems @  9.6.2013,  04:17 Найти цитируемый пост)
если результат выражения возвращающего функцию присвоить переменной, то разница все равно будет 

А в каких случаях?

Мне что-то не удалось заметить:
Код
var v1 = (function(){ return 1; }());
var v2 = (function(){ return 1; })();

console.log(v1);
console.log(v2);
Код

1
1


Ну а в случаях Amphiluke дело уже не в функции, а в выражении. Там результат будет таким же, как если бы напрямую подставить вместо функции ее результат.

Это сообщение отредактировал(а) Arantir - 9.6.2013, 05:40


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
bems
Дата 9.6.2013, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(Arantir @  9.6.2013,  05:39 Найти цитируемый пост)
var v1 = (function(){ return 1; }());
var v2 = (function(){ return 1; })();
ты не понял. я про разницу между

Код

function f1(){ 
  return 1; 
}

и
Код

f2 = (function(){ return 1; })




--------------------
Обижено школьников: 8
PM MAIL   Вверх
Amphiluke
Дата 9.6.2013, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата (bems @  9.6.2013,  09:17 findReferencedText)
ну разница все-таки есть, в случае в обычным объявлением к функции можно обратиться по имени.

Там изначально речь была вовсе не о различиях функций-деклараций и функций выражений (они отличны — это само сабой разумеется). Речь была о различиях двух форм записи IIFE (немедленно вызываемой функции выражения), а именно, между
Код

(function () {})();

и
Код

(function () {}());

А эти две записи по существу эквивалентны.


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM   Вверх
bems
Дата 9.6.2013, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



изначально какраз о декларации и выражения. но в сообщении на которое я отвечал уже о двух выражениях, это я стормозил, да


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.