! предыдущая функция в javascript?

Возможный дубликат:
Что делает восклицательный знак перед функцией?

Я впервые увидел функцию, отформатированную следующим образом:

!function(){}();

Что такое предыдущий восклицательный знак? Я предполагаю, что он работает так же, как:

(function(){})();

Но... что здесь происходит?

Ответы

Ответ 1

Предыдущий ! принимает оператор, не подлежащий анализу, и позволяет его анализировать с помощью механизма JS, который, в свою очередь, возвращает true.

function(){}();
SyntaxError: Unexpected token (

!function(){}();
>>true

Ответ 2

Это просто заставляет парсер JavaScript анализировать его как выражение, необходимое для его выполнения.

Ответ 3

Я пробовал это, он верен. Функция возвращает undefined, а !undefined - true.

!function(){}();
^          ^ ^
C          A  B
  • A. function(){} - это пустая анонимная функция
  • В. () выполняет функцию (A), возвращая undefined
  • С. ! отменяет undefined, который становится true

Я думаю, что они использовали этот трюк для кодового гольфа или запутанного кода. Плохо практиковать, что

Попробуйте javascript:alert(!function(){}()) в адресной строке браузера