作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有这段代码:
function foo (id_of_dom_element, number){
document.getElementById(id_of_dom_element).innerHTML=number;
number = number + 1;
setTimeout("foo(" + id_of_dom_element + "," + number + ")", 1000);
}
对该函数的初始调用:
foo("countdown", 0);
发生了什么:
问题:
非常感谢!
最佳答案
发生这种情况是因为您将字符串作为回调函数传递给 setTimeout
并且没有注意确保 id_of_dom_element
作为字符串本身传递,因此它引用自动创建的变量 window[id_of_dom_element]
(即元素本身)。
如今,将函数作为字符串传递被认为是极其糟糕的做法 - 不要这样做!相反,传递一个匿名函数:
setTimeout(function() {
foo(id_of_dom_element, number);
}, 1000);
更好的是,您可以这样封装整个行为:
function elementCounter(id, number) {
var el = document.getElementById(id);
(function loop() {
el.innerHTML = number++;
setTimeout(loop, 1000);
})(); // loop is an "immediately invoked function expression"
}
请注意,在此版本中,所有“状态”都包含在外部作用域的变量中,因此 setTimeout
调用只需传递对 loop
函数的引用。
关于JavaScript 无意中将 "translates"DOM 元素 id 字符串转换为 DOM 对象引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28852420/
我不知道这是否是其他人遇到的问题,但我在 python 中有这样的代码: def makemove(board,move,val): new=board new[move[0]][mo
不是重复的 我想在不使用任何默认电子邮件应用程序的情况下发送电子邮件,所以我进行了一些搜索,然后偶然发现了这个使用 JavaMail API 的解决方案 - Sending Email in Andr
在网络浏览器中,我希望能够使用 java 脚本打开任何已安装的应用程序(例如 facebook、twitter 等)。我无法更新 Intent 文件,只想从 java 脚本中进行更新。有没有办法从 j
我是一名优秀的程序员,十分优秀!