01.07.2019, 14:41
|
Новичок на форуме
|
|
Регистрация: 13.06.2012
Сообщений: 2
|
|
Нужна помощь в объяснении синтаксиса (говно)кода
Приветствую. Есть такое:
Этот код поставил меня в тупик. Так много вопросов и так мало ответов.
1) что это вообще за синтаксис сверху: !function и далее функции через запятую?
2) зачем делать
var $ = jQuery;
есть ли в этом неведомый мне смысл?
|
|
01.07.2019, 15:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
victor256,
1) ! способ запустить функцию, сразу после создания.
2) так короче.
|
|
01.07.2019, 21:59
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от 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
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
Сообщение от Malleys
|
Интересно, что это не запускает никакую функцию вообще!
|
не понимаю.
function() {
alert("1");
}();
так не сработает
а так сработает
!function() {
alert("1");
}();
что это, если не способ запустить(вызвать) функцию? от того что в результате получится выражение, по сути то - это запуск функции.
Последний раз редактировалось рони, 01.07.2019 в 22:24.
|
|
01.07.2019, 22:40
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от рони
|
не понимаю.
|
Не знаю, что вы пытаетесь доказать...
Сообщение от рони
|
так не сработает
|
Конечно же нет, там нет выражения
Сообщение от рони
|
а так сработает
|
Метод псевдонаучного тыка?
Я же написал, вы бы сначала почитали...
Ваше не понимаю, записывается так... (должно быть выражение)
(function() {
alert("1");
})();
Сообщение от рони
|
а так сработает
|
А зачем вам вычислять булево выражение? понятно, что true будет, функция возвращает undefined... Но зачем, вы же не используете это нигде!!!
var myHappyBoolean = !function() {
alert("1");
}();
alert(myHappyBoolean); // true
Сообщение от рони
|
что это, если не способ запустить(вызвать) функцию?
|
Вы запускаете функцию и ещё вычисляете.
Последний раз редактировалось Malleys, 01.07.2019 в 22:50.
|
|
01.07.2019, 22:43
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
Malleys,
я уже неоднократно писал вам, мне порой недоступны ваши обьяснения, в данном случае, это снова так.
|
|
01.07.2019, 22:52
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от рони
|
я уже неоднократно писал вам, мне порой недоступны ваши обьяснения, в данном случае, это снова так.
|
Почему следует произвести ещё одну операцию после того, как была вызвана функция?
!function() {
alert("1");
}();
-function() {
alert("1");
}();
+function() {
alert("1");
}();
~function() {
alert("1");
}();
[function() {
alert("1");
}()];
Почему нельзя сразу вызвать функцию?
(function() {
alert("1");
})();
|
|
01.07.2019, 22:55
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
Сообщение от Malleys
|
Вы запускаете функцию
|
Сообщение от Malleys
|
это не запускает никакую функцию
|
извините, но это бред какой-то, вы меня развеселили, думаю ваши обьяснения пригодятся, на форуме есть 3 или 4 темы, по заданным в начале вопросам, к сожалению я их не нашёл.
|
|
01.07.2019, 22:58
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
Malleys,
то есть вы полностью отрицаите, возможность использования ! и других знаков?
|
|
01.07.2019, 23:09
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от рони
|
то есть вы полностью отрицаете, возможность использования ! и других знаков?
|
Да, если они будут производит работу в холостую! А если функция реально что-то вычисляет и возвращает, то конечно же вы можете применить оператор ! и затем присвоить результат такого вычисления переменной, чтобы дальше с ней работать!
То, что вы показали с оператором !, на самом деле бессмысленно, зачем это вычисление? На получаемый объект никакая переменная не ссылается, и по сути сборщик мусора может сразу его удалить.
Сообщение от рони
|
извините, но это бред какой-то, вы меня развеселили
|
А что тут смешного? Вы запускаете функцию при помощи (), а это [оператор !] не запускает никакую функцию.
Так всё же, почему вам нельзя просто вызвать функцию?
(function() {
alert("1");
})();
Последний раз редактировалось Malleys, 01.07.2019 в 23:14.
|
|
|
|