在JavaScript中更改函数上下文(用于访问本地变量)

时间:2014-05-19 12:59:46

标签: javascript

是否可以在另一个可以使用此上下文访问局部变量的上下文中运行函数?

我做了这个概念证明:

var t = (function()
{
    "use strict";
    var ab = 5;

    var f = (function(t)
    {
        return function(c){ c.call(t); }
    })(t);

    return f;

})();

t(function()
{
    return ab;
});

这给我这个错误:ReferenceError:ab未定义

我传递给t的匿名函数是否可以访问本地变量ab

1 个答案:

答案 0 :(得分:2)

不幸的是(或幸运的是)你无法做到这一点。这里出现的问题是你无法绕过"来自函数(context)的所谓的 Activation Object Function.prototype.apply.call只能提供从任何常规Javascript对象设置函数上下文的选项,但formal parameter, function declarations and variables不会存储在任何"常规"中。宾语。这些值保存在下面的 Scope链中,并存储在您无法直接访问的激活对象(或 Lexical Environment Record )中来自Javascript。