超出NodeJS中的范围对象

时间:2014-11-28 08:39:43

标签: javascript node.js scope

当节点应用触发事件时,我正在使用audio-player package在本地播放声音。触发事件时,将使用需要打开的特定文件调用函数:

playSound(fileName);

单独的功能如下所示:

player = new Player('someDirectory/' + fileName + '.mp3');
player.play();

这将打开并开始完美地播放文件,但是当事件快速连续触发时,两个声音将同时播放。虽然我最初只想添加一个:

player.stop();

在新玩家之前

定义,前一个实例明显超出范围,因为该函数已被第二次调用。如何在重新开始播放之前停止播放器的所有其他实例?

2 个答案:

答案 0 :(得分:1)

你需要在外部范围内声明player变量,以便每个函数“看到”同一个玩家。

var player;

function playSound(fileName) {
    if (player) {
        player.stop();
    }

    player = new Player(fileName);
    player.play();
}

这称为闭包。

答案 1 :(得分:0)

你的播放器应该是静态的,只有一个实例应该存在并播放所有声音。

function Podcast() {};

Podcast.FILE_EXTENSION = 'mp3';
Podcast.download = function(podcast) {
    console.log('Downloading ' + podcast + ' ...');
};

这里我们创建了一个名为Podcast的构造函数,它带有一个名为FILE_EXTENSION的静态属性和一个名为download的静态方法。

http://elegantcode.com/2011/01/19/basic-javascript-part-7-static-properties-and-methods/