Ответ 1
Предыдущий !
принимает оператор, не подлежащий анализу, и позволяет его анализировать с помощью механизма JS, который, в свою очередь, возвращает true.
function(){}();
SyntaxError: Unexpected token (
!function(){}();
>>true
Возможный дубликат:
Что делает восклицательный знак перед функцией?
Я впервые увидел функцию, отформатированную следующим образом:
!function(){}();
Что такое предыдущий восклицательный знак? Я предполагаю, что он работает так же, как:
(function(){})();
Но... что здесь происходит?
Предыдущий !
принимает оператор, не подлежащий анализу, и позволяет его анализировать с помощью механизма JS, который, в свою очередь, возвращает true.
function(){}();
SyntaxError: Unexpected token (
!function(){}();
>>true
Это просто заставляет парсер JavaScript анализировать его как выражение, необходимое для его выполнения.
Я пробовал это, он верен.
Функция возвращает undefined
, а !undefined
- true.
!function(){}();
^ ^ ^
C A B
function(){}
- это пустая анонимная функция()
выполняет функцию (A), возвращая undefined
!
отменяет undefined
, который становится true
Я думаю, что они использовали этот трюк для кодового гольфа или запутанного кода. Плохо практиковать, что
Попробуйте javascript:alert(!function(){}())
в адресной строке браузера