JavaScript中如何修改const值并将audioMap传入playSequence函数
问题解决说明
首先说明const相关特性
const声明的变量存在暂时性死区,在声明完成前无法访问/修改,强制操作会抛出语法错误,同时const变量必须在声明时完成初始化,不支持先声明后赋值const仅限制变量的指针指向不能修改,如果声明的是数组、对象这类引用类型,你可以修改其内部的元素/属性,但不能给该变量重新赋值为新的数组/对象
实现需求的修改方案
你只需要修改playSequence函数调用的入参即可,这里需要注意:你现有代码的playSequence逻辑中调用了sounds.shift()方法,该方法会直接修改传入的原数组,如果直接传audioMap,第一次调用后audioMap就会被清空,后续再调用时就没有可用的音频地址了,所以建议传入audioMap的浅拷贝,避免修改原常量:
// 替换原有playSequence调用代码即可 playSequence([...audioMap]);
如果你的业务场景中audioMap仅需要调用一次,也可以直接传入原常量:
playSequence(audioMap);
可选优化建议
你现有playSequence函数内存在重复逻辑,外层的播放判断和内部playNextSounds的逻辑完全一致,可以直接简化为:
function playSequence(sounds) { const playNextSounds = (sounds) => { if (sounds.length > 0) { const audio = new Audio(); audio.src = sounds[0]; audio.currentTime = 0; audio.play(); sounds.shift(); audio.addEventListener('ended', function () { return playNextSounds(sounds); }) } else { self._call(); } } // 直接调用内部方法即可,无需重复实现逻辑 playNextSounds(sounds); }
内容的提问来源于stack exchange,提问作者Danura Aditya
相关产品推荐
相关产品推荐

