javascript函数后括号中的值
我正在尝试重新使用一些Javascript代码,我在一个答案中找到了这些代码的链接。但我想先更好地理解它的语法。其大纲是:javascript函数后括号中的值,javascript,syntax,Javascript,Syntax,我正在尝试重新使用一些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 (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
),可以立即调用
接受'window'的值root
取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);