【问题标题】:Javascript - what does this line mean? !function ( $ ) [closed]Javascript - 这条线是什么意思? !function ( $ ) [关闭]
【发布时间】:2012-02-16 12:25:59
【问题描述】:

Javascript:这行是什么意思?

!function ( $ )

【问题讨论】:

  • 没什么,没有上下文。这不是一个独立的表达。让我们看看剩下的!
  • 您能否提供一些上下文,例如指向文件来源的链接,或者至少是上面和下面的几行?
  • 表示缺少代码。
  • 它看起来像一个不会返回值的自执行函数的开始。

标签: javascript


【解决方案1】:

我敢打赌,稍微更完整的版本应该是这样的:

!function ( $ ) {
   // some code
}(jQuery);

基本上,上面使用! 运算符将匿名函数解释为可以立即调用的函数表达式。拿走!,你有一个无效的函数声明(或函数声明,取决于你喜欢的术语)——因为它没有名字而无效。更常用的方法是将其放在括号中:

(function ( $ ) {
   // some code
})(jQuery);

但有些人喜欢使用! 而不是括号来保存字符。

您可能会使用这样的代码的一个原因是,您可以创建一些最终不会出现在全局范围内的工作变量。或者,从匿名函数内部,创建一个在全局范围内但具有可以访问匿名函数范围内的私有变量的方法的对象。

关于$ 参数,我只是猜测jQuery 将作为参数传递给函数,因为这在使用参数名称$ 时很常见。您可能会这样做的一个原因是,您可以在使用 jQuery 的同时使用另一个定义 $ 的库,但在此块中为 jQuery 使用 $

【讨论】:

    【解决方案2】:

    我认为我们遗漏了一些数据,但我打赌这部分来自条件语句或三元中的闭包。

    var test = 'Testing!';
    (!function ( $ ) {
       alert($);
       return false;
    }(test) ? alert("bad") : alert("good"));
    

    http://jsfiddle.net/MattLo/WpqfN/3/

    【讨论】:

    • @Havvy:当然可以。所有函数都在 JS 中创建闭包。
    • Matt Lo:关于 IIFE,您当然是对的,但 ! 更有可能被用来代替 (),以强制将函数作为表达式的一部分进行评估。 See this question。所以函数的返回结果很可能被忽略了。
    • 有趣,伙计,这个愚蠢的问题肯定让很多人动了脑筋。
    • @am not i am 除了根本没有关闭任何值,并且该函数在初始执行后不可调用。
    • @MattLo:Havvy 这么认为,但我不这么认为。词法作用域是通过闭包实现的。在 JavaScript 中,每个函数都可以访问其封闭的变量环境。
    猜你喜欢
    • 2017-03-21
    • 2014-03-19
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    相关资源
    最近更新 更多