javascript - 从调用范围访问 javascript 变量

标签 javascript string scope

我正在尝试定义一个函数,该函数可以访问调用它的函数范围内的变量。

( 我正在尝试构建一个比 "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/

相关文章:

javascript - 无法使用 AJAX 调用从 JSON 对象获取值

验证密码的 Javascript 函数

javascript - Canvas 中的最近邻插值(internet explorer 9)

c# - 检查一组不断变化的字符串是否包含字符串的最快方法

c - 为字符串数组分配内存

javascript - 调整图像大小以适应父 CSS/Bootstrap

c++ - 格式化 C 字符串

powershell - 从 psm 函数的脚本 block 中定义的获取变量

python - 在Python中的函数中声明全局变量

c# - 我在 C# 中声明了一个变量,但不能在 switch 语句中使用它