Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数后括号中的值_Javascript_Syntax - Fatal编程技术网

javascript函数后括号中的值

javascript函数后括号中的值,javascript,syntax,Javascript,Syntax,我正在尝试重新使用一些Javascript代码,我在一个答案中找到了这些代码的链接。但我想先更好地理解它的语法。其大纲是: (function (root, ns, factory) { // some code } (window, 'detectZoom', function() { // some more code })); 有关完整代码的参考信息,请参见中的接受答案 我理解最终结果是如何实现的,但我不太清楚内部(…)块与第一个块的关系,也不知道它内部的逗号分隔列表告诉

我正在尝试重新使用一些Javascript代码,我在一个答案中找到了这些代码的链接。但我想先更好地理解它的语法。其大纲是:

(function (root, ns, factory) {
    // some code
} (window, 'detectZoom', function() {
    // some more code
}));
有关完整代码的参考信息,请参见中的接受答案

我理解最终结果是如何实现的,但我不太清楚内部(…)块与第一个块的关系,也不知道它内部的逗号分隔列表告诉编译器什么

有人能解释一下吗?谢谢。

它创建了一个接受三个参数的匿名(未命名)函数:

function (root, ns, factory) {
    // some code
}
然后通过三个参数立即调用该函数,第三个参数是另一个匿名函数:

(window, 'detectZoom', function() {
    // some more code
})
这两个块需要包装在一对
()
;原因如下:

您拥有的是一个立即调用的函数表达式()。如果你去掉所有的论点,你只剩下这个:

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

(function (root, ns, factory) {
    // some code
}());
(function (root, ns, factory) {
    // some code
} (window, 'detectZoom', function() {
    // some more code
}));
你给它三个参数:

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

其中一个参数,
factory
,恰好是一个函数。

有一个匿名函数,它包含三个参数(
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);