2016-06-29 83 views
-1

裏面我有一個簡單的腳本來播放音頻,如:JavaScript的變量分配一個回調函數返回未定義

 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_duration回報..

durationaddEventListener給出了音樂的持續時間。

我是javascript新手......這裏有什麼問題?被髮射的等待loadedmetadata事件之前

+1

這可能是異步調用。需要等待迴應。 –

+0

什麼是解決方案? – aryan

+0

重複的問題詳細解釋了問題的原因,並解釋了該機制如何工作以及您需要做什麼。你不可能得到比這個問題上已經存在的答案更好的解釋。 –

回答

0
console.log("checking duration") 
console.log(music_duration) 

將被執行。

您可以查看編輯腳本這樣:

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) 

你會看到therehere之前打印。

+0

解決方案是什麼? – aryan

+0

@aryan你可以移動你需要在回調本身回調之後執行的代碼 - 或者在其他函數中 – rpadovani

+0

你只是描述症狀而不解決原因。 **異步控制**流程和**運行完成保證**是導致此行爲的原因。 – ftor

相關問題