Detail of operation of !function() { return false; } ()
1 | !function() { return false; } () |
我知道为什么你可能写这样的东西,但我对它的工作方式有疑问。 据我所知,感叹号做了两件事:
所以我的问题是:
根据运算符优先级,
编辑为清晰:您可以重写这一行,以完成相同的事情:
1 2 3 4 5 6 7 8 9 10 | // 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)它不会"改变"它。 当解析器通过"函数"位时它会期望一个表达式,所以"函数"被解析为(可能是匿名的)函数表达式的一部分而不是函数语句。
2)它作用于整条线。 如果你看一下优先级,就像jbabey所建议的那样,你会看到函数调用比ifation运算符绑定得更紧,所以整个类似的被评估为
1 | ! ((function(){})()); |
或者在类似的,可能更易阅读的版本中:
1 2 | var f = function(){ ... }; ! (f()); |