在JavaScript中实现动态范围

时间:2015-01-13 07:29:34

标签: javascript scope

我正在尝试在与定义范围不同的范围内执行函数。我需要在运行时范围内获得可用于函数上下文的变量。

示例代码可以像

var k = function () { alert(x); };

(function () {

    var x = 100;
    k();

})();

函数k不可能访问运行范围内的x。

我可能的工作是:

  1. 将x作为参数注入函数
  2. 使用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);
    
  3. 将x绑定为该函数的this上下文并执行alert(this)

  4. 如果我排除上述3个选项,还有其他方法可以解决这个问题吗? 有没有办法可以在运行时将变量注入函数作用域,就像callapplybindthis一样?

1 个答案:

答案 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();

})();