一尘不染

JavaScript功能前的感叹号有什么作用?

javascript

!function () {}();


阅读 588

收藏
2020-04-22

共1个答案

一尘不染

JavaScript语法101。这是一个 函数声明

function foo() {}

请注意,这里没有分号:这只是一个函数 声明 。您将需要调用foo()来实际运行该功能。

现在,当我们添加看似无害的感叹号时:!function foo() {}它将变为 表达式 。现在它是一个 函数表达式

!单独不会调用函数,当然,但我们现在可以把()结尾:!function foo() {}()它的优先级高于!并立即调用函数。

因此,作者正在做的是为每个函数表达式保存一个字节。更具可读性的书写方式是:

(function(){})();

最后,!使表达式返回true。这是因为在默认情况下所有IIFE回报undefined,这给我们留下了!undefined这是true。不是特别有用。

2020-04-22