“您需要一个立即函数将所有代码包装在其本地范围内,而不是将任何变量泄漏到全局范围内”
这不是真的。(或者至少是有争议的)
我认为 OP 的要求是,“您需要一个立即函数来创建本地范围还是可以只使用普通函数范围?” 我同意 OP 的观点,即函数和立即函数会将变量隐藏days
在自己的范围内。要测试一个变量是否是全局的,(在控制台中)你可以检查它是否定义在window
.
即时功能:
(function() {
var days = ['Sun','Mon'];
// ...
// ...
alert(msg);
}());
window.days; // undefined
正常功能:
var func = function() {
var days = ['Sun','Mon'];
// ...
// ...
alert(msg);
};
window.days; // undefined
Object.prototype.toString.call(window.func); // "[object Function]"
如您所见,days
在这两种情况下都不是全局的。它在函数范围内是隐藏的或私有的。但是,在第二个示例中,我确实创建了一个全局变量。func
但这证明您不需要立即函数来创建本地范围。
PS:我没看过这本书。我敢肯定作者很聪明,知道他们在说什么,但在这种情况下还不够具体。或者,也许我们需要更多关于引用的上下文来完全理解它。