我正在学习匿名闭包和模块模式。我知道使用return
对象会暴露模块的一些功能。但是,有人提到将某些功能附加到window
/ global
对象。
我想知道附加到window
是否是一种更好的 hacky 方式来做出正确的回报,或者是否合法使用?
var speakingDog = (function() {
var dog = 'spot';
var says = 'woof';
function speak() {
return (dog + ' goes ' + says);
}
return {
speak: speak
}
})();
VS
(function() {
var dog = 'spot';
var says = 'woof';
function speak() {
return (dog + ' goes ' + says);
}
window.speak = speak;
})();
答案 0 :(得分:0)
向window
添加属性等同于创建全局变量(因为它实际上就是它所做的)。
另一方面,您返回对象的第一个示例封装了所有内容,并通过speakingDog
在代码运行的范围内公开它。当然,这更加清晰,因为你没有创建相当无意义的(speak()
)全局变量。