Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужна помощь в объяснении синтаксиса (говно)кода (https://javascript.ru/forum/misc/77908-nuzhna-pomoshh-v-obyasnenii-sintaksisa-govno-koda.html)

victor256 01.07.2019 14:41

Нужна помощь в объяснении синтаксиса (говно)кода
 
Приветствую. Есть такое:


Этот код поставил меня в тупик. Так много вопросов и так мало ответов.
1) что это вообще за синтаксис сверху: !function и далее функции через запятую?
2) зачем делать
var $ = jQuery;

есть ли в этом неведомый мне смысл?

рони 01.07.2019 15:02

victor256,
1) ! способ запустить функцию, сразу после создания.
2) так короче.

Malleys 01.07.2019 21:59

Цитата:

Сообщение от victor256
1) что это вообще за синтаксис сверху: !function и далее функции через запятую?

Дело в том, чтобы вызвать анонимную функцию, она должна быть выражением. Функцию можно сделать выражением, заключив её в скобки!
(function(e) { /* ... */ })(jQuery);
Этот вызов функции представляет выражение, которое возвращает функция.

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

var isSomethingNotTrue = !(function(e) { /* ... */ })(jQuery);
Можно убрать лишнюю пару скобок
var isSomethingNotTrue = !function(e) { /* ... */ }(jQuery);
Получилось как у вас, но у вас результат никуда не записывается, так что можно упростить до первого варианта, который я привёл выше.

Цитата:

Сообщение от рони
1) ! способ запустить функцию, сразу после создания.

Интересно, что это не запускает никакую функцию вообще!

Если что-то перечисляется через запятую, то оно становится выражением! Обратите внимание, что третье выражение у вас вызывается нормально!

Цитата:

Сообщение от victor256
2) зачем делать
var $ = jQuery

Знак доллара является разрешенным символов для идентификатора в языке Javascript. jQuery использует знак $ как сокращение для идентификатора jQuery.

рони 01.07.2019 22:16

Цитата:

Сообщение от Malleys
Интересно, что это не запускает никакую функцию вообще!

не понимаю.
function() {
  alert("1");
}();
так не сработает
а так сработает
!function() {
  alert("1");
}();

что это, если не способ запустить(вызвать) функцию? от того что в результате получится выражение, по сути то - это запуск функции.

Malleys 01.07.2019 22:40

Цитата:

Сообщение от рони
не понимаю.

Не знаю, что вы пытаетесь доказать...
Цитата:

Сообщение от рони
так не сработает

Конечно же нет, там нет выражения
Цитата:

Сообщение от рони
а так сработает

Метод псевдонаучного тыка?

Я же написал, вы бы сначала почитали...

Ваше не понимаю, записывается так... (должно быть выражение)
(function() {
  alert("1");
})();


Цитата:

Сообщение от рони
а так сработает

А зачем вам вычислять булево выражение? понятно, что true будет, функция возвращает undefined... Но зачем, вы же не используете это нигде!!!

var myHappyBoolean = !function() {
  alert("1");
}();

alert(myHappyBoolean); // true


Цитата:

Сообщение от рони
что это, если не способ запустить(вызвать) функцию?

Вы запускаете функцию и ещё вычисляете.

рони 01.07.2019 22:43

Malleys,
я уже неоднократно писал вам, мне порой недоступны ваши обьяснения, в данном случае, это снова так.

Malleys 01.07.2019 22:52

Цитата:

Сообщение от рони
я уже неоднократно писал вам, мне порой недоступны ваши обьяснения, в данном случае, это снова так.

Почему следует произвести ещё одну операцию после того, как была вызвана функция?

!function() {
  alert("1");
}();


-function() {
  alert("1");
}();


+function() {
  alert("1");
}();


~function() {
  alert("1");
}();


[function() {
  alert("1");
}()];


Почему нельзя сразу вызвать функцию?

(function() {
  alert("1");
})();

рони 01.07.2019 22:55

Цитата:

Сообщение от Malleys
Вы запускаете функцию

Цитата:

Сообщение от Malleys
это не запускает никакую функцию

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

рони 01.07.2019 22:58

Malleys,
то есть вы полностью отрицаите, возможность использования ! и других знаков?

Malleys 01.07.2019 23:09

Цитата:

Сообщение от рони
то есть вы полностью отрицаете, возможность использования ! и других знаков?

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

То, что вы показали с оператором !, на самом деле бессмысленно, зачем это вычисление? На получаемый объект никакая переменная не ссылается, и по сути сборщик мусора может сразу его удалить.

Цитата:

Сообщение от рони
извините, но это бред какой-то, вы меня развеселили

А что тут смешного? Вы запускаете функцию при помощи (), а это [оператор !] не запускает никакую функцию.

Так всё же, почему вам нельзя просто вызвать функцию?
(function() {
  alert("1");
})();


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