javascript在回调函数中赋值变量返回未定义

javascript在回调函数中赋值变量返回未定义,javascript,Javascript,我有一个简单的脚本来播放音频,如: var audio = new Audio(music) var music_duration audio.addEventListener('loadedmetadata', function() { var duration = audio.duration console.log(duration) music_duration = d

我有一个简单的脚本来播放音频,如:

        var audio = new Audio(music)
        var music_duration
        audio.addEventListener('loadedmetadata', function() {
            var duration = audio.duration
            console.log(duration)
            music_duration = duration
        })

        console.log("checking duration")
        console.log(music_duration)
此处
music\u duration
返回未定义的值

duration
内部
addEventListener
给出音乐的持续时间

我是javascript新手。。。这里怎么了

console.log("checking duration")
console.log(music_duration) 
将在发出loadedmetadata事件之前执行

您可以通过以下方式检查编辑脚本:

    var audio = new Audio(music)
    var music_duration
    audio.addEventListener('loadedmetadata', function() {
        console.log('here')
        var duration = audio.duration
        console.log(duration)
        music_duration = duration
    })
    console.log('there')
    console.log("checking duration")
    console.log(music_duration)

您将看到
这里之前打印了

这可能是异步调用。需要等待响应。解决方案是什么?重复的问题详细说明了问题的原因,并解释了此机制如何工作以及您需要做什么。你不可能得到比这个问题已经存在的答案更好的解释。你还应该检查“运行到完成保证”原则什么是解决方案???@aryan您可以将回调后需要执行的代码移动到回调本身中,或者在另一个函数中,您只是描述症状,而没有说明原因。异步控制流和运行到完成保证是导致这种行为的原因。