查看ryanve response.js的代码,它从以下内容开始:
(function(root, name, make) {
var $ = root['jQuery'] || root['Zepto'] || root['ender'] || root['elo'];
if (typeof module != 'undefined' && module['exports']) module['exports'] = make($);
else root[name] = make($);
}(this, 'Response', function($) {
...
这叫做什么,为什么它有用,它究竟做了什么?
答案 0 :(得分:3)
此:
(function(root, name, make){...})(this,'Response', function($){...});
调用“init”函数传递默认命名空间(this
在浏览器中为window
)引用为root
变量。
此:
var $ = root['jQuery'] || root['Zepto'] || root['ender'] || root['elo'];
获取jQuery或Zepto等的参考...模块。
而且:
if (typeof module != 'undefined' && module['exports'])
module['exports'] = make($);
else
root[name] = make($);
检查文件是否加载了可用的模块对象(很可能是CommonJS环境)并调用“constructor”make()
并将其排气作为模块注册。
否则将make()结果注册为全局命名空间(root[name] = ...
)
答案 1 :(得分:0)
这是一种钩子。这正是您可以添加当前插件名称“Response”与任何提到的库,如"jQuery, Zepto, ender, elo"
。并且“响应”再次留下锚点
在以下代码中。
if (typeof module != 'undefined' && module['exports']) module['exports'] = make($);
else root[name] = make($);
自编代码需要一些改动。让我们把jQuery,"this"
引用window
,基于作者试图喜欢window.jQuery.Response = function(jQuery){}
的代码和“if”条件中的模块是全局的。当您使用像环境这样的NodeJ时,它将可用。在这种情况下,Response
附加了该全局变量,而不是jQuery。
注意:我们可以说,“响应”定义可以与任何提及“模块”全局的提及库和/或库一起使用。
答案 2 :(得分:0)
此模式有助于避免在全局范围内编写代码,并且编写在代码第一行的函数是自调用函数。一旦声明了自调用函数,就会调用它。这是怎么做的。
(function(argument1, argument2, argument2){
alert("Self invoked");
})(arg1, arg2, arg3);
在你的情况下,第一个参数是this
,它引用window
对象,第二个是字符串,第三个是回调。