在这个JS片段中,我有一个带有两个版本的私有函数的对象(bar和bar2)。我声明了两个实例,但是我发现一个函数私有版本(栏)似乎错误地访问了OTHER对象中的私有变量v的值。有人可以告诉我为什么吗?

Eric = function(_v)
{
    var v = _v;

    bar = function() {
        alert(v);
    };

    function bar2() {
        alert(v);
    };

    this.foo = function() {
        bar();
    };

    this.foo2 = function() {
        bar2();
    };
};

var e = new Eric('I am Eric');
var e2 = new Eric('I am Eric II');

e2.foo();   // outputs "I am Eric II"
e.foo();    // outputs "I am Eric II" ------ WHY?

e2.foo2();  // outputs "I am Eric II"
e.foo2();   // outputs "I am Eric"


非常感谢
安德鲁

最佳答案

bar = function() {
    alert(v);
};


您已将bar设置为全局。这意味着bar是调用e2 = new Eric("I am Eric II");中定义的第二个小节功能

通过使用var bar = ...将其设置为本地可解决此问题。

作为单独的注释,您忘记了var Eric

您也不需要本地声明var v,因为您的构造函数参数_v在范围内。您可以继续使用该参数。

09-11 20:20