可以访问功能的进一步范围吗? 我会更好地解释。
我有一个函数,我想从中调用它的调用函数作用域。
function called() {
// i want to access the calling outer function scope
}
function calling() {
called();
}
obviusly called()
函数可以被很多calling
函数调用,而called()
必须知道哪个函数调用了他,`并访问其范围变量和函数
答案 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支持它。
此外,您无法访问调用者函数范围或变量。它的可用性仅限于找出谁给你打电话(有助于记录或追踪)。