我正在尝试在与定义范围不同的范围内执行函数。我需要在运行时范围内获得可用于函数上下文的变量。
示例代码可以像
var k = function () { alert(x); };
(function () {
var x = 100;
k();
})();
函数k不可能访问运行范围内的x。
我可能的工作是:
使用eval之类的
var k = "function () { alert(x); }";
(function () {
var x = 100;
var m = eval("("+k+")");//prints 100
m();
})();
//But this same work around wont work if I use k = "alert(x);" and
//define m = new Function(k);
将x绑定为该函数的this
上下文并执行alert(this)
。
如果我排除上述3个选项,还有其他方法可以解决这个问题吗?
有没有办法可以在运行时将变量注入函数作用域,就像call
,apply
和bind
对this
一样?
答案 0 :(得分:1)
我在你的函数中看到声明变量而不是直接调用k
是可以的。
this
适合你吗?
var o =
{
x : 50,
k : function() { alert(this.x); }
}
o.k();
(function () {
this.x = 100;
var f = o.k;
f();
o.k();
})();