JS:声明私有函数的效果不同

1 javascript private function

在这个JS片段中,我有一个具有两个版本的私有函数(bar和bar2)的对象.我声明了两个实例,但是我发现私有函数(bar)的一个版本似乎错误地访问了OTHER对象中私有var 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"
Run Code Online (Sandbox Code Playgroud)

非常感谢安德鲁

Ray*_*nos 5

bar = function() {
    alert(v);
};
Run Code Online (Sandbox Code Playgroud)

你已经做到了bar全球化.这意味着这bar是您通话中定义的第二个条形函数e2 = new Eric("I am Eric II");

通过使用var bar = ...它来使其本地修复此问题.

作为一个单独的笔记,你忘记了var Eric.

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