javascript外部范围问题

时间:2011-08-30 14:28:58

标签: javascript function scope

可以访问功能的进一步范围吗? 我会更好地解释。

我有一个函数,我想从中调用它的调用函数作用域。

function called() {
    // i want to access the calling outer function scope
}

function calling() {
    called();
}

obviusly called()函数可以被很多calling函数调用,而called()必须知道哪个函数调用了他,`并访问其范围变量和函数

5 个答案:

答案 0 :(得分:5)

不,这是不可能的。

要从两个函数中访问变量,您需要:

在共享范围内声明它

var the_variable;
function called() {
    // i want to access the calling outer function scope
}

function calling() {
    called();
}

将其作为参数传递

function called(passed_variable) {
    return passed_variable;
}

function calling() {
    var some_variable;
    some_variable = called(some_variable);
}

答案 1 :(得分:2)

您应将任何相关信息作为参数传递到called()

function called(x, y, z) {
}

function calling() {
   var x = getX();
   var y = computeY();
   var z = retrieveZ();

   called(x, y, z);
}

如果您希望called执行不同的操作并接收不同的上下文信息,具体取决于谁调用它,您应该将其设置为多个单独的函数。

答案 2 :(得分:1)

function called(outterScope) {
  // outterScope is what you want
  x = outterScope.declaredVariable;
  outterScope.declaredFunction();
}

function calling() {
  this.declaredVariable = 0;
  this.declaredFunction = function() { // do something };

  var _self = this;
  called(_self);
}

答案 3 :(得分:0)

没有

如果需要使用调用代码块范围内的变量(示例函数)
你必须在参数中传递它们

或者您可以在对象范围(通过this.param_name

中创建对象和访问属性

答案 4 :(得分:-1)

根据你想做的事情,可能有更好的方法来做,但如果绝对不得不诉诸它,你可以通过Function.caller找到它:

function myFunc() {
   if (myFunc.caller == null) {
      return ("The function was called from the top!");
   } else
      return ("This function's caller was " + myFunc.caller);
}

请注意,它不是标准的一部分,即使某些主流浏览器和IE7支持它。

此外,您无法访问调用者函数范围或变量。它的可用性仅限于找出谁给你打电话(有助于记录或追踪)。