!function () {}();
JavaScript语法101。这是一个 函数声明 :
function foo() {}
请注意,这里没有分号:这只是一个函数 声明 。您将需要调用foo()来实际运行该功能。
foo()
现在,当我们添加看似无害的感叹号时:!function foo() {}它将变为 表达式 。现在它是一个 函数表达式 。
!function foo() {}
该!单独不会调用函数,当然,但我们现在可以把()结尾:!function foo() {}()它的优先级高于!并立即调用函数。
!
()
!function foo() {}()
因此,作者正在做的是为每个函数表达式保存一个字节。更具可读性的书写方式是:
(function(){})();
最后,!使表达式返回true。这是因为在默认情况下所有IIFE回报undefined,这给我们留下了!undefined这是true。不是特别有用。
undefined
!undefined
true