Javascript匿名关闭 - 返回vs窗口

时间:2017-11-27 03:11:54

标签: javascript

我正在学习匿名闭包和模块模式。我知道使用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;
})();

1 个答案:

答案 0 :(得分:0)

window添加属性等同于创建全局变量(因为它实际上就是它所做的)。

另一方面,您返回对象的第一个示例封装了所有内容,并通过speakingDog在代码运行的范围内公开它。当然,这更加清晰,因为你没有创建相当无意义的(speak())全局变量。