澄清尼古拉斯“可维护的JavaScript”第199页的一个JavaScript范围

时间:2013-12-03 14:00:28

标签: javascript scope

在附录A,第199页中,当讨论使用“use strict”时,它是这样的:

  

如果你想要严格模式应用于多功能而不需要   多次写“use strict”,使用立即功能   调用:

//good
(function() {
    "use strict";

    function doSomething() {
        // code
    }

    function doSomethingElse() {
        // code
    }

}());

我的问题是,如果这是整个非常函数的样子,那么可能对其立即调用它没有影响(对其余的)?因为在匿名函数中只声明了两个函数,但它们既没有从那里调用(因此这两个函数不能对世界其他地方产生任何副作用),也没有返回到外部,因此它们的引用都会丢失。

可能我只是想确认一下,代码片段只是为了显示“use strict”的用法,所以它只是省略了对这两个函数的调用或返回?

谢谢,

/布鲁因

2 个答案:

答案 0 :(得分:2)

我们的想法是IIFE包含所有代码,而不仅仅是那些函数。

答案 1 :(得分:1)

我认为你是对的。这个例子不完整,因为它永远不会调用它中定义的函数。该示例仅用于说明如何在特定的一组函数中应用“use strict”。如果你想扩展它以便导出函数,你可以这样做:

var myModule = (function() {
    "use strict";

    function doSomething() {
        // code
    }

    function doSomethingElse() {
        // code
    }

    return {
        doSomething: doSomething,
        doSomethingElse: doSomethingElse
    };

}());

myModule.doSomething();
myModule.doSomethingElse();