【发布时间】:2011-07-22 07:26:31
【问题描述】:
今天第一次看到这样格式化的函数:
!function(){}();
前面的感叹号是干什么用的?我认为它的功能与以下内容相同:
(function(){})();
但是……这是怎么回事?
【问题讨论】:
标签: javascript
今天第一次看到这样格式化的函数:
!function(){}();
前面的感叹号是干什么用的?我认为它的功能与以下内容相同:
(function(){})();
但是……这是怎么回事?
【问题讨论】:
标签: javascript
前面的!接受不可解析的语句,让JS引擎解析,然后返回true。
function(){}();
SyntaxError: Unexpected token (
!function(){}();
>>true
【讨论】:
+function(){}(); 和-function(){}(); 也可以工作,因为+ 和- 可以是一元运算符。不过! 更可取,因为它只是一元运算符,而 + 和 - 既可以是二元运算符,也可以是一元运算符。
它只是让 JavaScript 解析器将其解析为表达式,这是执行它所必需的。
【讨论】:
! 的表达式一样。
我试过了,它返回 true。
函数返回undefined,!undefined为真。
!function(){}();
^ ^ ^
C A B
function(){} 是一个空的匿名函数()执行函数(A),返回undefined
! 否定undefined,变成true
我认为他们将这个技巧用于代码高尔夫或混淆代码。实际使用它是一种不好的做法
在浏览器地址栏中尝试javascript:alert(!function(){}())
【讨论】: