javascript函数后括号中的值

And*_*ava 12 javascript syntax

我正在尝试重新设计一些我在SO上的答案中找到的Javascript代码.但我想首先更好地理解它的语法.其大纲是:

(function (root, ns, factory) {
    // some code
} (window, 'detectZoom', function() {
    // some more code
}));
Run Code Online (Sandbox Code Playgroud)

见接受的答案在这篇文章的参考完整的代码.

我理解最终结果如何实现,但我不太清楚内部(...)块如何与第一个相关,或者它内部的逗号分隔列表告诉编译器.

谁能解释一下?谢谢.

kam*_*uel 13

有匿名函数取三个参数(root,ns,factory),它立即调用.

  • root 取'窗口的值.
  • ns 取值的 'detectZoom'
  • factory 获取回调函数的值(也是匿名的)

说明:

(function (root, ns, factory) {
   // the body of the anonymous function
} (window, 'detectZoom', function() {
   // the body of the 'factory' callback
}));
Run Code Online (Sandbox Code Playgroud)

要打破它,如何通过四个步骤来获取此代码:

 1.
 // Anonymous function.
 (function (root, ns, factory) {/* body */});

 2.
 // Anonynmous function, immediately invoked
 (function (root, ns, factory) {/* body */})();  // parentheses mean it's invoked

 3.
 // Callback as a separate argument
 var cbk = function () {};
 (function (root, ns, factory) {/* body */})(window, 'detectZoom', cbk);

 4.
 // Callback as an anonymous function
 (function (root, ns, factory) {/* body */})(window, 'detectZoom', function () {});
Run Code Online (Sandbox Code Playgroud)

您可以将代码重写为更详细:

var outer = function (root, ns, factory) {
  // the body
};

var callback = function () {
  // the body
};

outer(window, 'detectZoom', callback);
Run Code Online (Sandbox Code Playgroud)


Jam*_*ice 9

你拥有的是一个立即调用的函数表达式(IIFE).如果你删除所有你刚刚留下的参数:

(function () {
    // some code
}());
Run Code Online (Sandbox Code Playgroud)

该函数需要三个参数:

(function (root, ns, factory) {
    // some code
}());
Run Code Online (Sandbox Code Playgroud)

你传递了三个论点:

(function (root, ns, factory) {
    // some code
} (window, 'detectZoom', function() {
    // some more code
}));
Run Code Online (Sandbox Code Playgroud)

其中一个论点factory恰好是一个函数.