我试图定义一个函数,它可以访问调用它的函数范围内的变量.
(我试图构建一个比“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请求,其中回调函数仍然可以访问调用函数的局部变量.
UPDATE
我误解了你的问题.你真正想要构建的东西是不可能在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"