超出 NodeJS 中的范围对象

Out of Scope Objects in NodeJS

本文关键字:范围 对象 NodeJS 超出      更新时间:2023-09-26

当节点应用程序触发事件时,我正在使用音频播放器包在本地播放声音。 触发事件时,将使用需要按如下方式打开的特定文件调用一个函数:

playSound(fileName);

单独的函数如下所示:

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

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

player.stop();

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

您需要在外部作用域中声明 player 变量,以便每个函数"看到"同一个玩家。

var player;
function playSound(fileName) {
    if (player) {
        player.stop();
    }
    player = new Player(fileName);
    player.play();
}

这称为闭包。

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

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/