操作细节!function(){return false; }()

时间:2012-05-23 14:55:23

标签: javascript function

!function() { return false; } ()

我知道为什么你可能写这样的东西,但我对它的工作方式有疑问。据我所知,感叹号做了两件事:

  1. 它作用于function() { return false; },将其更改为表达式
  2. 它还会对执行函数的结果起作用,因此整行评估为true
  3. 所以我的问题是:

    1. 这是正确的解释吗?
    2. 如果它是正确的,那么由于()!更紧密地绑定,第一部分(函数本身变为表达式)是如何发生的?为什么感叹号不会在整条线上起作用?

2 个答案:

答案 0 :(得分:4)

根据operator precedencefunction声明(这是new Function的简写)将首先发生,函数调用()将发生在第二位,而否定! 1}}最后会发生。

为清晰起见编辑:你可以重写那一行来完成同样的事情:

// declare an anonymous function and assign it to the myFunc variable
var myFunc = function () { 
    return false; 
};

// execute the function and store it's return value (false) in returnValue
var returnValue = myFunc();

// negate the return value (true)
var output = !returnValue;

答案 1 :(得分:1)

1)它不“改变”它。当解析器通过“函数”位时它会期望一个表达式,因此“函数”被解析为(可能是匿名的)函数表达式的一部分而不是函数语句。

2) 在整条线上行动。如果你看一下优先级,就像jbabey所建议的那样,你会看到函数调用比ifation运算符绑定得更紧,所以整个类似的被评估为

! ((function(){})());

或者是类似的,可能更具可读性的版本:

var f = function(){ ... };
! (f());