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

时间:2012-04-18 01:01:27

标签: javascript scope closures

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

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

    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);

4 个答案:

答案 0 :(得分:1)

抱歉,但你不能。

您可以访问名称空间的唯一方法是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);

但这很可能几乎肯定是

答案 1 :(得分:1)

这对你有用吗?

_.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);

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

ECMA-262明确地阻止了对函数变量对象的访问(函数实际上不必有一个,它们只需要像它们一样),所以你无法访问它。

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