访问调用者函数上下文而不传递它

时间:2013-02-21 10:32:07

标签: javascript scope

如果从另一个函数甚至框架调用它,我如何访问调用者上下文? 示例1.一般情况下是否可能?

var aaa = function(){
    (function(){console.log(ab)}).call(arguments.callee.caller); //fail
}
function bbb(){
    var ab = 'fff'; //defined in this function's context
    aaa();
}

示例2。

<html>
    function someFunction(){
        //description on bottom
    }
    <iframe>
        function() bbb(){parent.someFunction();}
        bbb();
    </iframe>
</html>

我是否可以获取调用者函数的Window对象而不将其直接传递给someFunction?我可以拥有多个iframe,并且所有iframe都会调用someFunction。

1 个答案:

答案 0 :(得分:2)

  

一般可以吗?

您可以获得对调用函数的引用,但是您永远不能访问该函数之外的局部变量。

  

我是否可以获取调用者函数的Window对象而不将其直接传递给someFunction?

没有。函数对象与定义函数的环境的window对象之间没有公开关系。window对象是函数作用域链的一部分,但您无法访问作用域链。 / p>


要明确,将函数需要知道的任何内容传递给函数(依赖注入)。它还使您的功能更容易测试。