如何在以下场景中访问父函数“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);
答案 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>