JavaScript函数后面的括号中的值

14

我正在尝试重新利用我在SO答案中找到的一些JavaScript代码。但是我想先更好地了解它的语法。它的概述如下:

(function (root, ns, factory) {
    // some code
} (window, 'detectZoom', function() {
    // some more code
}));
请参考这篇文章中的被接受的答案来获取完整代码的参考。
我理解最终结果是如何实现的,但我不太清楚内部 (...) 块与第一个块的关系,或者它内部的逗号分隔列表告诉编译器什么。能有人解释一下吗?谢谢。
3个回答

16

有一个匿名函数,它接受三个参数 (root, ns, factory) 并立即执行。

  • root 的值为 `window`。
  • ns 的值为 'detectZoom'
  • factory 的值为回调函数(同样是匿名的)。

说明:

(function (root, ns, factory) {
   // the body of the anonymous function
} (window, 'detectZoom', function() {
   // the body of the 'factory' callback
}));

分解开来,实现此代码的四个步骤:

 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 () {});

你可以将你的代码改写得更冗长:

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

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

outer(window, 'detectZoom', callback);

11
你所拥有的是一个立即执行函数表达式(IIFE)。如果删除所有参数,你只剩下这个:
(function () {
    // some code
}());

该函数需要三个参数:
(function (root, ns, factory) {
    // some code
}());

你需要传递三个参数:

(function (root, ns, factory) {
    // some code
} (window, 'detectZoom', function() {
    // some more code
}));

其中一个参数factory是一个函数。


1
它创建一个匿名(未命名)函数,接受三个参数:
function (root, ns, factory) {
    // some code
}

然后立即调用该函数,传递三个参数,其中第三个参数是另一个匿名函数:

(window, 'detectZoom', function() {
    // some more code
})

这两个代码块需要放在一对()中; 这里解释了原因:
解释JavaScript的封装匿名函数语法

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接