从调用范围访问javascript变量

我试图定义一个函数,它可以访问调用它的函数范围内的变量.

(我试图构建一个比“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"
点赞