Javascript:Why setTimeout(audio.play,500( 不起作用?
这是行不通的(Firefox 52 说TypeError: 'play' called on an object that does not implement interface HTMLMediaElement.
(:
setTimeout(document.getElementsByTagName('audio')[0].play,1000.5)
这是有效的:
setTimeout(function(){document.getElementsByTagName('audio')[0].play()}, 1000.5);
为什么?我也看不懂错误提示
在第一个示例中,您将函数直接作为回调传递给 setTimeout
,但这样您将丢失应在其中调用 play 函数的上下文,因为该play
在全局对象上调用,在浏览器的情况下,这将是window
。
这就是您收到错误消息的原因:
TypeError:"play"调用了未实现接口 HTMLMediaElement 的对象。
在第二种情况下,您将一个函数传递给setTimeout
然后该函数将执行:
document.getElementsByTagName('audio')[0].play()
在这种情况下,play()
立即document.getElementsByTagName('audio')[0]
对象上调用,并且该调用的返回值(绝对不是函数(用作setTimeout
回调。
相关问题:
- JavaScript 中的
setTimeout
和this
-
setTimeout()
在 JavaScript 类中使用this
- 为什么
setTimeout(location.reload)
抛出类型错误?