模块的主要优点(我听说过)是他们隐藏私有变量。模块模式的要点?
var Module = (function() {
var privateProperty = 'foo';
return {
publicProperty: '...',
publicMethod: function(args) { ... }
}
})();
但是,IIFE没有必要这样做。如果你只是删除它,privateProperty将被隐藏。那么为什么要使用IIFE?我试图理解理由。
编辑:
我继续读那privateProperty没有IIFE将是全球范围的一部分。我认为这是错误的。
如果我做到以下几点:
console.log(privateProperty); // => Reference Error: privateProperty isn't defined
我得到一个参考错误。如果我这样做:
console.log(Module.privateProperty) // => undefined
我得到undefined。如果我这样做:
var mod = new Module();
console.log(mod.privateProperty); // => undefined
我得到undefined。全局作用域不能访问JS中的本地作用域。
编辑2:
test.js
var test = (function() {
var privateProperty = 'foo';
return {
publicProperty: 'bar',
}
})();
test.js
var test1 = function() {
var privateProperty = 'foo';
return {
publicProperty: 'bar',
}
};
index.html的 ...
<script src="./test.js"></script>
<script src="./test1.js"></script>
<script>
console.log(test.privateProperty); // => undefined
console.log(test1.privateProperty); // => undefined
</script>
当我尝试上述,我没有访问权限在任何情况下都属于privateProperty。人们在谈论的名称在哪里?什么是IIFE解决?
“* privateProperty将被隐藏”*“ - 否?它与'Module'的范围相同,这正是我们在这里试图避免的吗? – Bergi
你在说什么es6模块? – bitten
@Bergi为什么我们试图避免模块中的范围。我认为私有变量的意义在于它们在模块之外(或者在函数范围之外)是隐藏的。 – jro