我正在阅读一篇关于Javascript最佳实践的文章,并且对使用哪种功能结构感到困惑......
我想它可能会对变量和函数的范围产生影响,但是你会使用哪种结构(这被认为是最佳实践)?
结构1:使用对象文字。
var obj1 = {
_myvar : 'myval',
init: function() {
this.function1();
this.function2();
},
function1: function() {
alert('function1');
},
function2: function() {
alert('function2');
}
};
obj1.init();
结构2:将代码包装在自动执行功能中。
(function(){
var _myvar = 'myval',
function1 = function() {
alert('function1');
},
function2 = function() {
alert('function2');
},
init = (function() {
function1();
function2();
}) ();
}) ();
答案 0 :(得分:3)
当您不希望其他人干扰您的代码和/或不想使用任何全局变量时,您可以使用自执行匿名函数。如果您可能想要使用这些函数/对象/其他任何地方,您可能希望使用第一个。
答案 1 :(得分:1)
当您需要从代码的其他部分访问对象中的方法和变量时,“结构1”是合适的。当您编写要在其他地方重复使用的库代码时,该格式应始终是您的首选。
当您不想与应用程序的其他部分共享代码时,“结构2”是合适的,因此您希望保护变量和函数免受来自其他地方的干扰。
答案 2 :(得分:0)
我发现Christian Heilmann的Revealing Module Pattern非常有用。 (向下滚动到他页面上的最后一个“绿屏”代码示例。)
使用is pattern,您可以在匿名执行的函数中私下创建所有方法/函数,然后通过返回的对象选择公共接口。