如何在javascript中访问父函数闭包?

如何在javascript中访问父函数闭包?,javascript,scope,closures,Javascript,Scope,Closures,在以下场景中,如何访问父函数“var”变量(我只能编辑重置函数的定义): 对不起,你不能 访问名称空间的唯一方法是with语句 例如,如果您能够重新编写整个内容,可以这样做: _.bind(function(){ var parentNamespace = { foo: 5, }; with (parentNamespace) { var reset = function(){ foo = 6; //this c

在以下场景中,如何访问父函数“var”变量(我只能编辑重置函数的定义):

对不起,你不能

访问名称空间的唯一方法是
with
语句

例如,如果您能够重新编写整个内容,可以这样做:

_.bind(function(){
    var parentNamespace = {
        foo: 5,
    };

    with (parentNamespace) {
        var reset = function(){
            foo = 6;  //this changes foo,
            parentNamespace.bar = 7;  //**I want this to add another "var", so I don't pollute global scope
        }
        reset();
        console.log(foo); //6
        console.log(bar); //7
    }
}, window);

但这几乎肯定是个坏主意。

这对你有用吗

_.bind(function(){
    var foo = 5, bar;

    var reset = function(){
        foo = 6;  //this changes foo,
        bar = 7;  //**I want this to add another "var", so I don't pollute global scope
    }
    reset();
    console.log(foo); //6
    console.log(bar); //7
}, window);

我不确定我是否理解你的问题,所以我的答案可能不是你想要的

var reset = function(){
    foo = 6;  
    reset.bar = 7;   
}
reset.bar = 13;
reset();  // reset.bar is back to 7.

ECMA-262例外地阻止了对函数变量对象的访问(函数实际上不必有变量对象,它们只需表现得像有变量对象一样),因此您无法访问它


您只能通过在适当的范围内声明变量或将变量包含在FunctionDeclaration或FunctionExpression的形式参数列表中来添加属性,没有其他方法。

和with only add a obj to scropeAnd
with
在JavaScript中是一个可怕的语句,这是一个很好的方法。如果你想让一个真正的可访问的封闭范围,你必须在封闭范围内声明它是的,这就是我现在的方式,我只是对所有名称的重复感到沮丧。
var reset = function(){
    foo = 6;  
    reset.bar = 7;   
}
reset.bar = 13;
reset();  // reset.bar is back to 7.