我一直在努力提高JavaScript技能,并且我已经知道将脚本包装在匿名函数中的好处是可以使它自调用,并使变量和内部函数保持私有。
但是,将匿名函数分配给变量,然后在该函数内部再次将与空对象相同的变量,这有什么意义呢?是要清除吗?
最后,函数return
的作用是什么?
var app = (function () {
'use strict';
var app = {};
//more code
return app;
})();
答案 0 :(得分:2)
如前所述,您使用此语法创建了一个闭包,因此您可以将变量保持私有和公开状态,并将Interface保留为API,那么为什么要在闭包中返回并清空或填充对象呢?这是一种公共方法可以使用,这有助于避免API与外部API(库)之间的上下文冲突。
var api = (function(jqueryRef){
var $ = {
addClass: jqueryRef.addClass,
yourOwnAddClassFn: ...
};
return $;
})($);
如您所见,您可以将jquery引用作为参数传递,并可以在闭包中使用它,然后可以将$
通用jquery命名空间用于API,而不会发生冲突。
答案 1 :(得分:0)
您要寻找的被称为scope
。看一下来自scotch.io的示例:
// global scope (scopeA)
var Module = (function() {
// scope is now everything in this function (scopeB)
function privateMethod() {
console.log('privateMethod called!')
}
return {
publicMethod: function() {
// this function has access to scopeB
console.log('publicMethod called!');
privateMethod();
}
};
})();
Module.publicMethod(); // gives publicMethod called!
Module.privateMethod(); // Uncaught ReferenceError: privateMethod is not defined
苏格兰威士忌对此的解释实际上是非常好的,所以我只引用它:
模块的return语句包含我们的公共函数。私有函数就是那些不返回的函数。不返回函数会使它们在Module名称空间之外不可访问。但是我们的公共功能可以访问我们的私有功能,这使它们可以方便地用于帮助程序功能,AJAX调用等。
我希望这可以为您清除一切。