jslint doesn’t consider this out of scope:
(function iife() {
"use strict";
function show(el) {
el.classList.remove("hide");
}
function hide(el) {
el.classList.add("hide");
}
function togglePlayButton(button) {
var player = button.querySelector("audio");
var play = button.querySelector(".play");
var pause = button.querySelector(".pause");
player.volume = 1.0;
if (player.paused) {
hide(play);
show(pause);
player.play();
button.classList.add("active");
} else {
button.classList.remove("active");
show(play);
hide(pause);
player.pause();
}
}
function upTo(el, selector) {
while (el.matches(selector) === false) {
el = el.parentNode;
}
return el;
}
function getPlayButton(el) {
return upTo(el, ".playButton");
}
function playButtonClickHandler(evt) {
var button = getPlayButton(evt.target);
togglePlayButton(button);
}
var playButton = document.querySelector(".playButton");
playButton.addEventListener("click", playButtonClickHandler);
}());
But it considers this out of scope.
What’s the difference?
(function iife() {
"use strict";
function show(el) {
el.classList.remove("hide5");
}
function hide(el) {
el.classList.add("hide5");
}
function togglePlayButton(button) {
var link = upTo(button, ".links5");
var player = button.querySelector("audio");
var play = button.querySelector(".play5");
var pause = button.querySelector(".pause5");
button.classList.add("playing");
hide(button.querySelector(".initial5"));
link.classList.remove("inactive");
player.volume = 1.0;
if (player.paused) {
hide(play);
show(pause);
player.play();
} else {
show(play);
hide(pause);
player.pause();
}
}
function upTo(el, selector) {
while (el.matches(selector) === false) {
el = el.parentNode;
}
return el;
}
function playButtonClickHandler(evt) {
var button = upTo(evt.target, ".playButton5")
togglePlayButton(button);
}
document.querySelector(".links5").classList.add("inactive");
var playButton = document.querySelector(".playButton5");
playButton.addEventListener("click", playButtonClickHandler);
}());