Показать сообщение отдельно
  #16 (permalink)  
Старый 02.07.2019, 05:45
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от j0hnik
вот вычисляет все же, и забывает напрочь
j0hnik, супер!

Сообщение от Poznakomlus
С каких делов в js вычисляются неиспользуемые выражения
А зачем писать неиспользуемые выражения?

Сообщение от Poznakomlus
Садитесь 3 здесь переменной $ явно присваивается объект jQuery, так как может быть и другой фреймворк (тот же mootools)
Я говорю про идентификаторы! Идентификатор $ используется как сокращение для идентификатора jQuery, это сделано путём присвоения двум разным переменным одного и того же объекта, т. е. $ === jQuery.

Сообщение от Poznakomlus
переменной $ явно присваивается объект jQuery, так как может быть и другой фреймворк (тот же mootools)
Т. е. в случае, когда не может быть другого фреймворка, то переменной $ неявно присваивается объект jQuery?

Сообщение от Poznakomlus
alert в своем синтетическом пример
Вы понимаете, что там может быть и другой код?

Сообщение от Poznakomlus
Вы напрочь забыли (не знаете )про анализатор кода языка
Речь-то идет о восклицательном знаке перед выражением, которое получено путём вызова анонимной функции!

Сообщение от рони
слон я слон, только по голове не бей.
Не уклоняйтесь от восклицательного знака!
У вас функция даже не возвращает булево значение!

Интересно, что если вашу идею (подставлять восклицательный знак) выразить через типизированный язык, то такой код даже не возможно скомпилировать! Почему же некоторые программисты на JS готовы вставлять такое в свой код?

Например, на C# можно записать подобную синтаксически правильную конструкцию, но её невозможно скомпилировать из-за противоречия в типе выражения!
using System;

class MainClass {
	public static void Main (string[] args) {
		!((Action)(() => {
			Console.WriteLine("1");
		}))();
	}
}


Даже если исправить противоречие... компилятор знает, что вы хотели всё-таки что-то другое!
using System;

class MainClass {
	public static void Main (string[] args) {
		!((Func<bool>)(() => {
			Console.WriteLine("123");
			return false;
		}))();
	}
}
В частности в ошибке компиляции говорится, что Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement. Видите, компилятор подсказывает, что всё-таки тут необходимо присвоение переменной!

Совершенно бессмысленный пример, показывающий правильное использование восклицательного знака! (Смотри также пост №5)
using System;

class MainClass {
	public static void Main (string[] args) {
		var ok = !((Func<bool>)(() => {
			Console.WriteLine("123");
			return false;
		}))();

		Console.WriteLine(ok);
	}
}

... и вообще, так обычно в C# не пишут! Всё намного проще!

Далее про JavaScript...
Нужен вызов функции? Пишете её, даёте ей имя и вызываете без всяких понтов, крестов и восклицательных знаков!
function main() {
    /* код программы */
}

main();

И что тут вам не понятно?

Нужен вызов анонимной функции? Пишете её, даёте ей имя (а можете и не давать) и вызываете без всяких понтов, крестов и восклицательных знаков!
(function main() {
    /* код программы */
})();

Хотя это рабочий код, но возникает вопрос, а зачем такое нужно? Оно может быть полезно, если main является асинхронной функцией (потому что вам потребовался await) или вы хотите обратить внимание на название функции (что это точка входа, всё начинается здесь)

Я думаю, в большинстве остальных случаев можно обойтись и блоком...
{
    /* код программы */
}


... или даже без него!
/* возможно импорт */
/* код программы */
/* экспорт */
Всё намного проще!
Ответить с цитированием