Javascript:Why setTimeout(audio.play,500) 不起作用



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 中的setTimeoutthis
  • setTimeout() 在 JavaScript 类中使用 this
  • 为什么setTimeout(location.reload)抛出类型错误?

相关内容

最新更新