Javascript JS-factory模式在存储在内存中时覆盖私有变量

Javascript JS-factory模式在存储在内存中时覆盖私有变量,javascript,factory-pattern,Javascript,Factory Pattern,所以我对js还是相当陌生,我想进入更高级的领域,但我对工厂模式有一个问题,下面是基本代码: (function () { var objs = []; function createObj(name) { var thename = name; return { publicsaythename : function () { console.log(thename);

所以我对js还是相当陌生,我想进入更高级的领域,但我对工厂模式有一个问题,下面是基本代码:

(function () {

    var objs = [];

    function createObj(name) {

        var thename = name;

        return {
            publicsaythename : function () {
                console.log(thename);   
            }
        }
    }

    for(var i = 0; i < 5; i++) {
        var theObj = createObj("thename" + i);
        theObj.publicsaythename();

        objs.push(theObj);
    }

    for(var i = 0; i < objs.length; i++) {
        theObj.publicsaythename();
    }

})();
第二个系列的console.logs输出我创建了5次的最后一个对象

 5 x thename4 
我做错什么了吗?或者这是预期的结果


如果这是预期的话。如何解决存储创建供以后使用的对象的问题?

theObj
变量中只存储一个对象引用,因此输出符合预期

我认为这是您在第二个循环中打算做的:

for(var i = 0; i < objs.length; i++) {
     objs[i].publicsaythename();
}
for(var i=0;i

因此,存储对象的方式没有问题。我猜你只是在使用它们时犯了一个错误。:-)

啊,脸掌。。。。但是,如果对象的作用域仅限于第一个for循环,那么它在第二个循环中如何可用?它不限于第一个循环。javascript中没有块作用域,只有函数作用域(闭包)。因此,
theObj
在匿名函数的作用域中声明,可用于第二个循环。每天学习新的东西。谢谢你的帮助!
for(var i = 0; i < objs.length; i++) {
     objs[i].publicsaythename();
}