javascript - javascript 函数后括号中的值

标签 javascript syntax

我正在尝试重新利用我在 SO 的答案中找到的一些 Javascript 代码。但我想先更好地理解它的语法。它的大纲是:

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

请参阅 this post 中已接受的答案以供引用完整代码。

我了解最终结果是如何实现的,但我不太清楚内部 (...) block 与第一个 block 的关系,或者其中的逗号分隔列表告诉编译器什么。

谁能解释一下?谢谢。

最佳答案

有一个带三个参数(rootnsfactory)的匿名函数会被立即调用。

  • 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);

关于javascript - javascript 函数后括号中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15783044/

相关文章:

javascript - var a= true if (x === 'condition' ) - 它类似于三元,但更像简单的英语。这是有效的 JavaScript 语法吗?

javascript - 在 IE 7 中获取 iframe 内容

javascript - $jsonObj 数据未通过 ajax 传递,仅在 IE(11) 上通过 POST

programming-languages - 修复 Lisp 语法

c++ - 在 switch 语句中使用常量数组的元素作为 case

css - CSS block 中的未闭合引号

javascript - 更改谷歌搜索中显示的网站标题(通过 Angular 路由器和用户界面路由器控制)

javascript - 将 HTML 表格导出到 Excel 时无法将数据加载到 excel 文件中

javascript - 点击事件在 map 上方不起作用

javascript - JavaScript 中的奇怪语法