我在在线测试中遇到过 !function() {}();
语句。通过将其更改为 !function() { return true; }();
我发现函数在 !
之前调用。我假设一个匿名函数声明首先成为一个函数表达式,然后它调用,最后一个结果在逻辑上被否定。我的假设是否正确,为什么语句按此顺序求值?
最佳答案
要否定某些x
,您需要知道这个x
是什么。您不能否定表达式,只能否定该表达式的结果。
换句话说:你不能说“给我‘将 x 设为 y 的值’的负数”!(x = y)
(好吧,你可以 用 JS 写这个,但这是不同的表达方式),但你可以说“给我 'dos x equal y' 的结果的负数吗?'” !(x == y)
.
同样的事情发生在方法上。因为你调用它(使用括号),所以它必须首先检查结果,然后才能否定它
编辑:
因为这似乎让人感到困惑:使用括号告诉 JavaScript 在函数定义之后调用该函数。尝试这个:
var test = function(){return 'hello';}
test 现在将是函数本身,运行 test()
将返回 hello
(也就是括号让 JS 调用函数)
当你编写 var test = function(){return 'hello';}()
时,你现在告诉 JS 立即调用该函数,并且该函数的结果应该是值测试
。运行它将使 test
具有值 'hello'
关于javascript - 语句评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42773335/