!javascript中的前一个函数?

rg8*_*g88 30 javascript

可能重复:
感叹号在功能之前做了什么?

我今天第一次看到了这样的格式化的函数:

!function(){}();
Run Code Online (Sandbox Code Playgroud)

前面的感叹号是什么?我认为它的功能与:

(function(){})();
Run Code Online (Sandbox Code Playgroud)

但是......这里发生了什么?

Mik*_*wis 43

前面的内容!采用un-parseable语句,并允许JS引擎解析它,然后返回true.

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

!function(){}();
>>true
Run Code Online (Sandbox Code Playgroud)

  • 这是如此误导,它没有任何可解析的东西,它使一个函数声明被解析为一个表达式,它评估函数本身,允许它被调用. (36认同)

Thi*_*ter 13

它只是让JavaScript解析器将其解析为表达式,这是执行它所必需的.

  • @Matthew:我不能代表高山88,但看起来他对动机感兴趣,因为他(正确地)将它与另一种编写自动执行功能的常用方式进行了比较. (5认同)

Min*_*ang 12

我试过了,它回来了.该函数返回undefined,并且!undefined为true.

!function(){}();
^          ^ ^
C          A  B
Run Code Online (Sandbox Code Playgroud)
  • A. function(){}是一个空的匿名函数
  • B. ()执行函数(A),返回undefined
  • C. !否定undefined,成为true

我认为他们将这个技巧用于代码高尔夫或混淆代码.实际使用它是一种不好的做法

试试javascript:alert(!function(){}())你的浏览器地址栏吧