Javascript:为什么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);
为什么?我也无法理解错误提示
答案 0 :(得分:2)
在第一个示例中,您将函数直接作为回调函数传递给setTimeout
,但是这样您将失去应该调用play函数的上下文,因为调用了play
全局对象,对于浏览器,这将是window
。
这就是您收到错误消息的原因:
TypeError:对未实现HTMLMediaElement接口的对象调用'play'。
在第二种情况下,您将函数传递给setTimeout
,然后执行此函数:
document.getElementsByTagName('audio')[0].play()
在这种情况下,立即在对象play()
上调用document.getElementsByTagName('audio')[0]
,并且该调用的返回值(绝对不是函数)用作setTimeout
回调。
相关问题: