我正在尝试定义一个函数,该函数可以访问调用它的函数范围内的变量。
( 我正在尝试构建一个比 "a"+ b 更漂亮,比 String.format("a{0}",b) 更简洁的字符串格式化程序。所以我可以得到 SF("a{b }"), 我不知道这是否可能)
所以
function magic(str) { return parentScope[str]; // or return eval( str ); // or something like that } function call() { var a = 1; alert( magic( "a" ) ); } call();
会提醒“1”。
目前我可以通过评估函数返回代码来做到这一点,但似乎必须有更好的方法。
最佳答案
只需将您的“魔法”函数放入调用函数中即可:
function call() {
function magic(str) {
return a;
}
var a = 1;
alert( magic() );
}
call();
这种幕后机制称为闭包,这是一个非常强大的概念。想想一个 AJAX 请求,回调函数仍然可以访问调用函数的局部变量。
更新
我误解了你的问题。您实际想要构建的东西不可能在 JavaScript 中实现,因为无法访问调用者的范围。
更新 2
这是我的字符串格式化函数。不像您想要的那样简洁,但仍然非常有用。
String.prototype.arg = function()
{
result = this;
// This depends on mootools, a normal for loop would do the job, too
$A(arguments).each((function(arg)
{
result = result.replace("%", arg);
}).bind(this));
return result;
}
你可以像这样使用它:
"%-% %".arg(1,2).arg(3)
并接收
"1-2 3"
关于javascript - 从调用范围访问 javascript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224017/