我在一次在线测试中遇到了!function() {}();
声明。通过将其更改为!function() { return true; }();
,我发现该函数在!
之前调用。我假设一个匿名函数声明首先变成一个函数表达式,然后它调用,最后结果在逻辑上被否定。我的假设是正确的,为什么声明按此顺序进行评估?
答案 0 :(得分:1)
要取消某些x
,您需要知道x
是什么。你不能否定表达,只能否定表达的结果。
换句话说:你不能说"给我负面的设定x为y'"的价值。 !(x = y)
(好吧,你可以在JS中写这个,但这是一个不同的表达方式),但你可以说"给我负面的&#结果39; x是否等于y?'" !(x == y)
。
方法也是如此。因为你称它(使用括号),它必须首先检查结果,然后才能否定它
修改强>
因为这似乎让人感到困惑:使用括号告诉JavaScript在函数定义之后调用该函数。试试这个:
var test = function(){return 'hello';}
test现在将是函数本身,并且运行test()
将返回hello
(a.k.a括号使JS调用函数)
当您编写var test = function(){return 'hello';}()
时,您现在告诉JS立即调用该函数,并且该函数产生的任何内容都应该是test
的值。运行此操作会使test
具有值'hello'