是否可以在另一个可以使用此上下文访问局部变量的上下文中运行函数?
我做了这个概念证明:
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
?
答案 0 :(得分:2)
不幸的是(或幸运的是)你无法做到这一点。这里出现的问题是你无法绕过"来自函数(context)的所谓的 Activation Object 。 Function.prototype.apply
和.call
只能提供从任何常规Javascript对象设置函数上下文的选项,但formal parameter, function declarations and variables
不会存储在任何"常规"中。宾语。这些值保存在下面的 Scope链中,并存储在您无法直接访问的激活对象(或 Lexical Environment Record )中来自Javascript。