Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:为什么setTimeout(audio.play,500)不工作?_Javascript - Fatal编程技术网

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

Javascript:为什么setTimeout(audio.play,500)不工作?,javascript,Javascript,Javascript:为什么setTimeout(audio.play,500)不工作 这不起作用(Firefox52说,TypeError:“play”调用了一个不实现接口HtmlMedia元素的对象。): 这是有效的: setTimeout(function(){document.getElementsByTagName('audio')[0].play()}, 1000.5); 为什么?我也不明白在第一个示例中,错误提示将函数作为回调直接传递给setTimeout,但这样会丢失调用pla

Javascript:为什么setTimeout(audio.play,500)不工作

这不起作用(Firefox52说,
TypeError:“play”调用了一个不实现接口HtmlMedia元素的对象。
):

这是有效的:

setTimeout(function(){document.getElementsByTagName('audio')[0].play()}, 1000.5);

为什么?我也不明白在第一个示例中,错误提示将函数作为回调直接传递给
setTimeout
,但这样会丢失调用play函数的上下文,因为在全局对象上调用了
play
,对于浏览器,这将是
窗口

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

TypeError:对未实现接口元素的对象调用了“播放”

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

document.getElementsByTagName('audio')[0].play()
在这种情况下,立即对对象
文档调用
play()

相关问题:


否,
.setTimeout
接受函数定义,而不是函数调用
.play
是正确的,如果你知道,它是正确的。我喜欢这个问题。相关:
setTimeout(document.getElementsByTagName('audio')[0]。play.bind(document.getElementsByTagName('audio')[0]),1000.5)
可以工作。您可以缩短它,因为您不需要dom元素来查找
play
函数,您只需要在绑定中使用它。我不确定,是
你将失去上下文
意思是
你将失去上下文
?我基本上接受你的答案,但是
设置超时(window.play,1000.5)
没有同样的消息(甚至没有错误信息)。@文盲
window.play
未定义的
,所以
设置超时(window.play,1000.5)
等于
设置超时(未定义,1000.5)
这就是为什么在这种情况下不会出现错误
document.getElementsByTagName('audio')[0]。另一方面,play
不是未定义的
,而是一个函数。但是
setTimeout(document.getElementsByTagName('audio')[0]。play,100)
在我手动创建
窗口时仍然显示相同的消息。play
方法。@code>setTimeout(document.getElementsByTagName('audio')[0].play,100)
不调用
play
函数
window
has,而是调用
document.getElementsByTagName('audio')[0]
上下文中的
函数。
document.getElementsByTagName('audio')[0].play()