我已经仔细阅读了SO上的所有其他(出色)答案(尤其是:How do JavaScript closures work?),但是我希望您对我对这一概念的理解有所反馈。

我知道一个用例是对公共(public)访问隐藏私有(private)方法的实现。

我想到的另一个是将其作为工厂生成器:

<script>

function carFactory( make ) {

    var m = make;
    return { manufacture: function ( model )

        {console.log("A " + m + " " + model + " has been created");}

    }
}

toyotaFactory = carFactory("toyota");
hondaFactory = carFactory("honda");

toyotaFactory.manufacture("corolla");
toyotaFactory.manufacture("corolla");
hondaFactory.manufacture("civic");

</script>

输出:
A toyota corolla has been create
A toyota corolla has been created
A honda civic has been created

那么您是否认为它是闭包的有效用例(即使用相同的代码库创建多个工厂)?还是我可以使用更好的东西来实现相同的目的?

请注意,问题不是关于闭包的技术实现,而是有关应用程序设计/开发中的有效用例的问题。

谢谢。

最佳答案

是的,将变量设为私有(private)是闭包的有效用法。它使您可以私有(private)访问变量,而无需使其成为公共(public)成员。

有关其他示例,请参见此引用:http://www.crockford.com/javascript/private.html

10-06 07:57