Я пытался научиться писать код, который дружелюбно трясет дерево, но столкнулся с проблемой с неизбежными побочными эффектами, с которыми я не уверен, что делать.
В одном из моих модулей я получаю доступ к глобальному конструктору Audio
и использую его, чтобы определить, какие аудиофайлы может воспроизводить браузер (подобно тому, как это делает Modernizr). Всякий раз, когда я пытаюсь потрясти дерево моего кода, элемент Audio
и все ссылки на него не удаляются, даже если я не импортирую модуль в свой файл.
let audio = new Audio(); // or document.createElement('audio')
let canPlay = {
ogg: audio.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, '');
mp3: audio.canPlayType('audio/mpeg; codecs="mp3"').replace(/^no$/, '');
// ...
};
Я понимаю, что код, содержащий побочные эффекты, не может быть устранен, но я не могу найти, как бороться с неизбежными побочными эффектами. Я не могу просто не получить доступ к глобальному объекту, чтобы создать audio
элемент, необходимый для обнаружения поддержки функций. Итак, как мне управлять доступом к глобальным функциям/объектам браузера (что я часто и делаю в этой библиотеке) таким образом, чтобы это было дружественным к дереву и все же позволяло мне исключить код?