2013-02-21 45 views
1

如何访问调用者上下文,如果它从另一个函数甚至框架调用? 例子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,并且他们都会调用一些函数。

回答

2

一般情况下可以吗?

你可以给调用者函数的引用,但你永远无法访问该功能之外的局部变量。

我可以得到调用者函数的Window对象而不直接将它传递给someFunction吗?

号有没有公开的函数对象和函数中定义的环境window对象之间的关系。该window对象是函数的作用域链的一部分,但你不能访问作用域链。


要明确,无论传功能需要知道的函数(依赖注入)。它还使您的功能更易于测试。

+0

实际问题与示例2直接相关。 您的答案已满,我必须重写代码才能解决问题。 – uzer 2013-02-21 10:40:41

+0

要明确,将函数需要知道的任何东西传递给函数(*依赖注入*)。它还使您的代码更易于测试。 – 2013-02-21 10:44:56