我对JavaScript还不是很熟悉,我了解到模块模式可以提供一种命名空间,并且同时拥有私有和公共成员,例如:
var module = (function() {
var s = "Hello, i'm private and in closure!";
return {
myString : s,
myFunc: function() { alert(s); }
};
})();
我确实看到了这种方法的好处,因为它给你一些面向对象编程的优势。但是我见过很多没有被分配给变量的IIFE的例子。就我所知,与你调用的普通函数相比,这种方法根本没有任何优势:
(function() {
var s = "Hello I'm private!";
$('#myButton').on('click', function() {
alert(s);
});
})();
2. 普通函数
function Initialize() {
var s = "Hello I'm private!";
$('#myButton').on('click', function() {
alert(s);
});
}
Initialize();
他们两个都有私有变量,避免了创建全局变量的需要,而且它们都在不返回任何值给变量的情况下执行。 虽然第二个给你选择一个好名字的选项,这个名字比潜在的大IIFE更能说明问题,让读者自己去发现发生了什么。 答案 我看到 到处都是 "避免命名空间污染",但是这两种方法都可以做到,只是第一种方法稍微难理解一点?
简而言之:
使用IIFE与普通函数相比的好处是什么?我错过了什么吗?为什么要使用它们?