我正在构建一个简单的计数器来练习JS中的闭包,而且我似乎无法越过这个错误。在我看来,将变量elem设置为canv的id应该可行,但显然不能连接。我在这里做错了什么?为什么我得到“无法读取html undefined的属性”?
我的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小提琴。 https://jsfiddle.net/8sjaqdrh/2/
您的JavaScript何时运行?它可能试图访问你的画布,然后它存在于DOM中,因此'document.getElementById('canv')'会给出'undefined'。尽管如此,当你调用getTime时,你并没有给出本地'el'的值,所以在这种情况下它也不会被定义。您需要解决这两个问题才能使其发挥作用。 –
@PatrickBarr哎呀我没有意识到这一点。但是我从innerHTML开始,这是一个确切的错误。 (尽管更新我的帖子) – crescentfresh
'getTime'需要一个参数,但它永远不会被传递。参数列表中的'el'使其成为'getTime'的局部变量,外部作用域中的'e'被映射。 Aand'innerHTML'不是一个函数。 – Teemu