如何在函数中访问变量

时间:2014-04-29 18:44:17

标签: javascript jquery

我有一个函数foo,其中包含bar。是否可以使用当前状态的代码从外部函数访问bar(即 - 不更改foo内的任何内容)。

根据我的理解,这是不可能的,因为bar仅对foo可见。我的解决方案是创建一个get()来提取bar

var foo = function() {
    var bar = {
        a : 'a',
        b : 'b'
    };
};

5 个答案:

答案 0 :(得分:1)

没有。 bar在上面的示例中实际上是私有范围的。如果您想访问bar,则必须提供一个访问者,例如您的建议,例如getBar()

答案 1 :(得分:1)

如果没有返回,则无法访问bar 。您需要将其范围置于foo之上:

var bar = {
    a : 'a',
    b : 'b'
};
var foo = function() {
  // do stuff with bar
};

或让foo返回bar

var foo = function() {
    var bar = {
        a : 'a',
        b : 'b'
    };
    return bar;
};
var otherBar = foo();

答案 2 :(得分:1)

bar是一个只在foo函数范围内可见的本地对象,所以你是对的。 bar不能从外部访问,除非你的foo函数返回一个函数来访问它,所以你选择实现一个getter听起来很合适。

最佳。

答案 3 :(得分:1)

您是正确的,以其当前形式,访问bar变量的唯一方法是通过访问器方法。但是,根据您希望如何实现此代码,您可以将bar变量声明为foo对象的属性。

它看起来像这样:

var foo = function() {
  this.bar = {
    a: 'a',
    b: 'b'
  }
}

var baz = new foo();

baz.bar.a; //returns 'a'

答案 4 :(得分:1)

正如其他人所说,你不能,但我总是数:),你可以这样得到吧:

<script type="text/javascript">
    var foo = function () {
        var bar = {
            a: 'a',
            b: 'b'
        };
    };

    var haha = function () {
        var evalBar = foo.toString().match("var bar[^}]*};")[0];
        eval(evalBar);
        console.log(bar);
    }

    haha();
</script>