【问题标题】:What is "!functionname()"? [duplicate]什么是“!函数名()”? [复制]
【发布时间】:2011-06-15 14:58:21
【问题描述】:

我正在寻找一些 JS 的示例代码,我发现了一些使用 !function() 的东西,我想知道感叹号到底是什么?

【问题讨论】:

    标签: javascript function call operator-keyword


    【解决方案1】:

    ! 是布尔非运算符。 !function()function() 的返回值转换为布尔值并返回它的相反值

    【讨论】:

      【解决方案2】:

      如果你用“函数”这个词代替函数的名称,它只是意味着“否定函数的结果”。 ! 表示不是。所以

      !true == false
      

      【讨论】:

        【解决方案3】:

        functionname 是一个表达式(可能计算为函数对象),此计算的结果(函数对象)由() 调用,() 调用函数并计算返回值。

        现在,这个返回值(它是一个表达式的结果)然后用unary ! (not) operator 取反。 ! 的规则是!truthy -> false!falsy -> true,其中truthyfalsy 是涵盖"truthy and falsy" in JavaScript 的概念。

        这个例子可以写成:!((functioname)()),但这太傻了

        【讨论】:

          【解决方案4】:

          试过这个:

          var a = !function () {
                      alert("notfun");
                      return "nottestfun";
                  }
          
          alert(a);
          

          它会发出警报:

          false
          

          没有别的。如果你尝试运行 a(),你会得到一个类型错误:

          Uncaught TypeError: Property 'a' of object [object DOMWindow] is not a function
          

          【讨论】:

          • 因为不是。请记住,function () {}(在示例中的表达式上下文中)只是返回一个立即被否定的函数对象! (var a = !someFunctionObject) 因为一个对象是一个truthy 值,那么这与var a = falsefalse() 是一样的。如果您想评估该函数并将! 应用于该函数...var a = !(function () {alert("notfun"); return "nottestfun"})(); alert(a) -- 快乐编码。
          【解决方案5】:

          这是一个否定。所以如果function() 返回一个布尔值,! 会否定它。

          不确定 JS 是如何管理命名的($ 是合法的),所以它也可能只是函数的名称:P(我已经检查过了,似乎因为 ! 是一个运算符,这是不合法的,所以这是的可能性)。

          【讨论】:

          • 名称中唯一允许的非字母数字字符是_$
          • @Reid 但是哦,它们确实经常被使用。 Javascript 不是我的专长。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-13
          • 2011-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-18
          相关资源
          最近更新 更多