我有一个函数foo
,其中包含bar
。是否可以使用当前状态的代码从外部函数访问bar
(即 - 不更改foo
内的任何内容)。
根据我的理解,这是不可能的,因为bar
仅对foo
可见。我的解决方案是创建一个get()
来提取bar
。
var foo = function() {
var bar = {
a : 'a',
b : 'b'
};
};
答案 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>