我想知道是否有任何方法可以从函数外部访问函数中被闭包捕获的变量;例如如果我有:
A = function(b) {
var c = function() {//some code using b};
foo: function() {
//do things with c;
}
}
有什么方法可以访问 A
的实例中的 c
。像这样的东西:
var a_inst = new A(123);
var my_c = somejavascriptmagic(a_inst);
最佳答案
闭包范围内的简单 eval 仍然可以访问所有变量:
function Auth(username)
{
var password = "trustno1";
this.getUsername = function() { return username }
this.eval = function(name) { return eval(name) }
}
auth = new Auth("Mulder")
auth.eval("username") // will print "Mulder"
auth.eval("password") // will print "trustno1"
但是你不能直接覆盖访问闭包作用域的方法(比如 getUsername()),你还需要一个简单的评估技巧:
auth.eval("this.getUsername = " + function() {
return "Hacked " + username;
}.toSource());
auth.getUsername(); // will print "Hacked Mulder"
关于javascript - 访问被闭包困住的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472529/