javascript中的函数前的感叹号!

! preceding function in javascript?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What does the exclamation mark do before the function?

今天我第一次看到这样的函数:

1
!function(){}();

前面的感叹号是用来做什么的?我假设它的功能与:

1
(function(){})();

但是…这是怎么回事?


前面的!接受不可解析的语句,并允许JS引擎解析它,而JS引擎反过来返回true。

1
2
3
4
5
function(){}();
SyntaxError: Unexpected token (

!function(){}();
>>true


我试过了,结果还是真的。函数返回undefined!undefined为真。

1
2
3
!function(){}();
^          ^ ^
C          A  B
  • a.function(){}是一个空的匿名函数
  • b.()执行函数(a),返回undefined
  • c.!否定undefined,变成true

我想他们用这个技巧来打代码高尔夫或是模糊的代码。实际使用那是一种坏习惯

在浏览器地址栏中尝试javascript:alert(!function(){}())


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