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