函数() { return false; } 的操作细节().

Detail of operation of !function() { return false; } ()

本文关键字:操作 细节 false return 函数      更新时间:2023-09-26
!function() { return false; } ()

我知道你为什么会写这样的东西,但我有一个关于它工作方式的问题。 据我了解,感叹号有两件事:

  1. 它作用于function() { return false; },将其更改为表达式
  2. 它还作用于执行函数的结果,因此整行的计算结果为 true

所以我的问题是:

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

根据运算符优先级,function声明(这是new Function的简写)将首先发生,函数调用()将其次发生,否定!将最后发生。

为清楚起见,编辑:您可以按此方式重写这一行以完成相同的操作:

// 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 所建议的那样,你会看到函数调用比否定运算符绑定得更紧密,所以整个 like 被计算为

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

或者在类似的,也许更具可读性的版本中:

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