在javascript中实现模块模式时为什么要执行自执行
我只是想知道为什么在javascript中实现模块模式时需要自执行代码 以下代码是典型的模块模式示例:在javascript中实现模块模式时为什么要执行自执行,javascript,module-pattern,Javascript,Module Pattern,我只是想知道为什么在javascript中实现模块模式时需要自执行代码 以下代码是典型的模块模式示例: var app = app || {}; app.model = app.model || {}; app.model.person = (function () { var say = function () { alert('say'); }; return { sa
var app = app || {};
app.model = app.model || {};
app.model.person = (function () {
var say = function () {
alert('say');
};
return {
saySomething: say
}
})();
但是,我找不出为什么这个函数应该用右大括号自动执行。谁说它需要这样实现?我看不出有什么理由更具可读性:
var app = app || {};
app.model = app.model || {};
app.model.person = {
saySomething: function () {
alert('say');
}
}
无法使用…谁说需要以这种方式实现?我看不出有什么理由更具可读性:
var app = app || {};
app.model = app.model || {};
app.model.person = {
saySomething: function () {
alert('say');
}
}
无法使用…函数/模块不是使用右大括号自执行的,而是使用结尾处的
()
自执行(或自调用)
这样做的原因是为了在JavaScript中模拟隐私。函数立即执行,并返回
saySomething
函数,该函数在返回后由于闭包而保持可用,因此是公共的。假设
函数未返回且在函数外部不可访问,因此是私有的函数/模块不是使用右大括号自执行的,而是使用结尾处的()
自执行(或自调用)
这样做的原因是为了在JavaScript中模拟隐私。函数立即执行,并返回
saySomething
函数,该函数在返回后由于闭包而保持可用,因此是公共的。say
函数没有返回,并且在函数外部无法访问,因此是私有的在您的示例中,实际上没有意义,因为say
函数稍后会在返回的对象中公开。但是考虑一下:
app.model.person = (function () {
var privateVar = 'I am private';
var say = function () {
alert(privateVar);
};
var doSomething = function() {
// operates on privateVar
};
return {
saySomething: say
}
})();
在这里它是有意义的,因为从对象外部永远无法访问
privateVar
。在您的示例中没有意义,因为say
函数后来在返回的对象中公开。但是考虑一下:
app.model.person = (function () {
var privateVar = 'I am private';
var say = function () {
alert(privateVar);
};
var doSomething = function() {
// operates on privateVar
};
return {
saySomething: say
}
})();
在这里它是有意义的,因为从对象外部永远无法访问
privateVar
。为了封装私有成员,请参阅为了封装私有成员,请参阅我仍然想知道为什么推荐自执行。如果我让person不是匿名函数而是普通构造函数,有什么不同?在使用普通构造函数的情况下,我可以调用如下函数:var p=new app.model.person();p、 说点什么;不同的是saySomething()函数在任何地方都可以访问,一个公共成员。自我执行并不总是被推荐的,它只是在某些情况下很有用,比如当您想在JavaScript中模拟隐私时。如果您不关心私人成员和公共成员,那么就没有理由使用它。JavaScript中有许多用于实现不同功能的模式,模块模式只是其中之一:)隐私、、、是可以实现的,即使它不是匿名和自执行的。像“app.model.person=function(){…};var p=new app.model.person()”这样的代码在封装方面有相同的结果,不是吗?我仍然想知道为什么推荐自执行。如果我让person不是匿名函数而是普通构造函数,有什么不同?在使用普通构造函数的情况下,我可以调用如下函数:var p=new app.model.person();p、 说点什么;不同的是saySomething()函数在任何地方都可以访问,一个公共成员。自我执行并不总是被推荐的,它只是在某些情况下很有用,比如当您想在JavaScript中模拟隐私时。如果您不关心私人成员和公共成员,那么就没有理由使用它。JavaScript中有许多用于实现不同功能的模式,模块模式只是其中之一:)隐私、、、是可以实现的,即使它不是匿名和自执行的。类似“app.model.person=function(){…};var p=new app.model.person()”这样的代码在封装方面有相同的结果,不是吗?