假设我在闭包中有一些变量,如下所示:
(function () {
var foo = document.getElementById('foo'),
bar = 'baz';
}());
还假设我有一个id为foo的html元素:
<h1 id = 'foo'>foo</h1>
然后我尝试从闭包外部访问闭包中的每个变量 第一栏:
console.log(bar); //logs a reference error 'bar is not defined'
然后foo:
console.log(foo.innerHTML) // logs 'foo' instead of throwing reference error. Why?
为什么foo仍然可以在闭包之外访问?
如果有帮助,听到jsFiddle:http://jsfiddle.net/YmDmL/
答案 0 :(得分:0)
您可以添加名称空间,如下所示:
(function () {
var foo = document.getElementById('foo'),
bar = 'baz';
}(myNameSpace));
然后从封闭之外使用:
console.log(myNameSpace.bar);
答案 1 :(得分:0)
'问题'不是闭包内定义的foo
变量在闭包之外是可用的(正如你自己证明当你得到bar
的引用错误时);这是浏览器在全局范围内为使用id
作为变量名的id
属性的所有元素自动创建变量。
在这种情况下:
<div id="foo">text in foo</div>
<span id="aSpan">other text, in aSpan</span>
会创建两个变量,div
和aSpan
:demo。
正如我的建议,在您的问题的评论中,如果您更改JavaScript以致电foo
任何其他,您会发现很明显本地没有泄漏 - 变量:
(function () {
var whatever = document.getElementById('foo'),
bar = 'baz';
}());
console.log(foo); // outputs: <div id="foo">text in foo</div>
console.log(whatever); // outputs: Uncaught ReferenceError: whatever is not defined