我正在构建一个简单的计数器来练习 JS 中的闭包,但我似乎无法克服这个错误。在我看来,将变量 elem 设置为 canv 的 id 应该可以,但显然有些东西没有连接。我在这里做错了什么?
我的 HTML:
<body>
<div id="canv">
</div>
</body>
我的JS:
function setup(delay) {
var el = document.getElementById('canv');
counterFn(el, delay);
}
function counterFn(el, delay) {
var counter = 0;
setInterval(getTime, delay);
function getTime(el) {
el.innerHTML(counter);
counter++;
}
}
setup(500);
这一切都感觉非常基本,但我似乎无法弄清楚我做错了什么。
这是一个 JS fiddle 。 https://jsfiddle.net/8sjaqdrh/2/
最佳答案
导致错误的原因是 el
没有在 getTime
范围内定义。
在 getTime 的父作用域 counterFn
中,定义了 el
,因为您在 counterFn(el, delay)
中调用它时给了它一个值setup
函数,即 el = document.getElementById('canv')
。
但是,在 getTime
范围内,您没有为 el
提供值。因此 el
变为 undefined
。
代码的另一个问题是 innerHTML
的使用不正确。
只需将参数从 function getTime(el){...
删除到 function getTime(){...
即可。
至于innerHTML
,它不是一个函数。所以不能像 innerHTML(counter)
那样调用它。
正确的方法是直接为其赋值,如innerHTML = counter
。
function setup(delay) {
var el = document.getElementById('canv');
counterFn(el, delay);
}
function counterFn(el, delay) {
var counter = 0;
setInterval(getTime, delay);
// Corrected code:
function getTime() {
el.innerHTML = counter;
counter++;
}
/* Your code
function getTime(el){
el.innerHTML(counter);
counter++;
}
*/
}
setup(500);
<div id="canv"></div>
关于javascript - 为什么我得到 "Cannot read property of html undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45380633/