有没有办法在JavaScript中轻松打破一个闭包?我得到的最接近的是:
var src = 3;
function foo () {
return function () {
return src; }
}
function bar (func) {
var src = 9;
return eval('('+func.toString()+')')(); // This line
}
alert(bar(foo()));
Run Code Online (Sandbox Code Playgroud)
这将打印'9',而不是'3',因为封闭将决定.然而,这种方法对我来说似乎有点难看,有没有更好的方法?
你的代码没有打破闭包,你只是将代码组成一个函数并在不同的上下文中评估它(标识符src具有不同的值).它与你在原版上创建的闭包没有任何关系src.
检查已在闭包中捕获的数据是不可能的.从某种意义上说,这些数据甚至比Java,C++,C#等私有成员更"私密",无论如何你总是可以使用反射或指针魔法来访问它们.
正如其他人所说,这似乎不是正确的做法。您应该解释为什么您想要这个以及您想要实现什么。
无论如何,一种可能的方法是访问函数内对象的属性。例子:
var src = 3;
function foo (context) {
context = context || window; // Fall back to the global namespace as default context
return function () {
return context.src;
}
}
function bar (func) {
var context = {src: 9};
return func(context);
}
alert(bar(foo));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1873 次 |
| 最近记录: |