2014-09-30 59 views
0

我正在關注基於Node.js的音樂播放器的一些示例代碼。這個例子只是一直在播放器上播放的命令行上傳遞的一些文件:運行代碼的功能就好像它在另一個範圍內運行

for (var i = 2; i < process.argv.length; i += 1) { 
    batch.push(openFileFn(process.argv[i])); 
} 

我想改變它,這樣的代碼只玩的東西時,另一事件發生時運行。我試圖通過將上面的代碼包裝在一個函數中並從我的事件處理程序調用它來完成此操作。不幸的是,沒有任何反應,當我這樣做的:

function play() { 
    for (var i = 2; i < process.argv.length; i += 1) { 
    batch.push(openFileFn(process.argv[i])); 
    } 
} 
play(); // Works 

function eventHandeler() { 

    // Other code 
    play(); // Doesn't work! 
} 

我已驗證的播放功能得到通過我的調試器設置斷點調用,所以我能想到的唯一的另一件事是,函數是莫名其妙被改變的範圍弄亂了。我如何在所需範圍內撥打play()

這裏有一個GitHub的要點與所有代碼:https://gist.github.com/anonymous/01f9572e73cdf3103e7b

回答

1

有沒有問題,呼籲像play()從一個較低的範圍功能。這兩種情況下都可以使用該功能。所以,這不完全是關於範圍。

所以,這個問題更可能是函數所依賴的其他變量的時間和狀態之一。例如,變量batch必須處於您的功能play()所需的適當狀態。我的猜測是,當您進行第二次函數調用時,該變量或openFileFn()依賴於的變量不在正確的狀態。

解決此問題的常用方法是創建獨立的函數,並且不依賴於其他範圍中的其他全局狀態或狀態。如果他們創建/初始化他們自己的狀態或者通過他們應該使用的狀態(或兩者的某種組合),那麼他們可以從任何地方被調用。

+0

對於'batch'你可能是對的,但我不能在以後聲明它,因爲它也有附加到它的事件監聽器。我會在github的要點上發佈代碼。 – BonsaiOak 2014-09-30 06:24:10

相關問題