小编典典

函数前的感叹号有什么作用?

all

!function () {}();

阅读 292

收藏
2022-02-25

共1个答案

小编典典

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

function foo() {}

注意没有分号;这只是一个函数 声明 。您需要调用 ,foo()才能实际运行该函数。

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

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

function foo() {}()这将是一个语法错误,因为您可以将参数 ( ()) 放在函数声明之后。

所以作者所做的是为每个函数表达式保存一个字节;一种更易读的写法是这样的:

(function(){})();

最后,!使表达式根据函数的返回值返回一个布尔值。通常,立即调用的函数表达式 (IIFE)
不会显式返回任何内容,因此它的返回值将是undefined,这给我们留下了!undefinedis true。未使用此布尔值。

2022-02-25