Javascript:为什么setTimeout(audio.play,500)不起作用?

时间:2018-04-18 17:33:32

标签: javascript

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);

为什么?我也无法理解错误提示

1 个答案:

答案 0 :(得分:2)

在第一个示例中,您将函数直接作为回调函数传递给setTimeout,但是这样您将失去应该调用play函数的上下文,因为调用了play全局对象,对于浏览器,这将是window

这就是您收到错误消息的原因:

  

TypeError:对未实现HTMLMediaElement接口的对象调用'play'。

在第二种情况下,您将函数传递给setTimeout,然后执行此函数:

document.getElementsByTagName('audio')[0].play()

在这种情况下,立即在对象play()上调用document.getElementsByTagName('audio')[0],并且该调用的返回值(绝对不是函数)用作setTimeout回调。

相关问题: