【问题标题】:What does `function (n) { .. }(jQuery)` mean?`function (n) { .. }(jQuery)` 是什么意思?
【发布时间】:2020-04-20 17:46:32
【问题描述】:

我正在检查一个缩小的脚本,并在各处看到这种模式function (n) { .. }(jQuery),它像这样在链中使用:function (n) {..}(jQuery), !function (n) {..}(jQuery), !function (n) {..}(jQuery)。

请注意,这不是(function($) {})(jQuery);,我找不到任何问题的答案。

有人有想法吗?谢谢!

【问题讨论】:

  • function (n) { .. } 是一个function expression,它允许您将函数映射到变量。 function (n) { .. }(x) 立即调用该函数。
  • 即为第一个。使用最初的!,它作为 IIFE 完全有效。关键是在 function 关键字之前有一些标记,使其成为函数表达式,而不是函数声明。
  • @max 是这样,但是 JS 会将任何以单词 function 开头的语句解析为函数声明,而不是表达式 - 同一行上结束 } 之后的任何内容都是无效语法.这就是为什么 IIFE 总是有括号,或者有时是前导 ! - 它们都是让引擎将其解析为表达式的“技巧”。
  • !function(n){} 和 (function(n){}) 具有相同的效果,因此可以认为它们在所有意图和目的上都是等效的。因此,在链接问题(及其重复问题)上给出的答案应该回答您的问题。特别相关:stackoverflow.com/a/23925102/218196

标签: javascript jquery


【解决方案1】:

这是一个立即调用的函数表达式,通常称为Immediately Invoked Function Expression。

括号当然是因为这个行不通:

function(){}();

因为那是无效的 JavaScript。在此之后,在 IIFE 前面加上 ! 字符可以忽略前缀 ( 和后缀 ),当然在大多数情况下是由 minifer 完成的。

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2017-02-27
    • 1970-01-01
    • 2012-07-04
    • 2016-02-14
    相关资源
    最近更新 更多