Осталось узнать, зачем для iife использовать arrow function
Вообще, из не очевидного, но порой нужного - destructuring в заранее объявленные переменные ([a, b] = doSmth())
Я хотел узнать про возможный сценарий для такой кострукции с iife. Основной функционал мне известен. Пока в голову пришло только присваивание значения при инициализации класса, но это то ещё извращение
Действительно, в стрелочном варианте происходит факап, когда в классическом виде оба варианта работают: (function(){})(); и (function(){}());
Не совсем понимаю второй, это типа в фигурных описывается функция, вызывается правыми скобками, и результат присваивается как "тело" для левой функции?
Вообще, оба варианта выглядят как "о, ебать как прикольно можно сделать, использовать в реальности конечно ни кто не будет, но выглядит все равно прикольно"
Оба варианта - это IIFE, Immediately Invoked Function Expression, немного отличаются по синтаксису и чуть-чуть по-разному работают "под капотом", но внешне никакой разницы.
Второй вариант - он по смыслу такой же, что и первый. Если разбирать по частям:
function(){}
обычное объявление функции, которое сразу же вызывается:
function(){}()
но просто так после этого поставить точку с запятой нельзя, синтаксис не позволит, поэтому всё это оборачивают в скобки
(function(){}())
и вот теперь это вполне легитимное выражение. От выражения (42); отличается только содержимым скобок.
А, а я думал это какая-то хитровыебаная хрень с блэкджеком и причитающимся. А оно, оказывается, безо всякой изюминки.
За обьяснение спс)
Вот эталон хитровыебанной хрени:
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) );
return y;
}
Быстрое вычисление обратного квадратного корня
f(x) = x^(-1/2)
Такое вычисление очень частое в работе с трехмерной графикой. Экономили такты проца как могли.


