可以说我在闭包中有一些变量,如下所示:
(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/
最佳答案
问题不在于闭包内部定义的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
JS Fiddle demo。
关于javascript - 分配给document.getElementById的变量可以在闭包之外访问吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21198431/