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)
你拥有的是一个立即调用的函数表达式(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恰好是一个函数.
| 归档时间: |
|
| 查看次数: |
4417 次 |
| 最近记录: |