【发布时间】:2021-06-02 12:30:04
【问题描述】:
我有一个带有幻灯片画廊的整页灯箱,我正在尝试重构我的代码,这样我就不必使用全局变量了。我正在将一个变量作为参数从一个函数传递到另一个函数。当我打开灯箱库时,一切正常:看到正确的图像并显示计数器中的数字。当我想切换到下一个或上一个图像时,问题就开始了。我无法访问存储或存储灯箱打开时看到的当前图像的变量。 我发布了没有变量声明的简化代码。
// This is a function which opens the lightbox with the galery after clicking on a thumbnail image.
function openSlideshowLightbox (event, currentSlide) {
for (const [currentThumbnailImg] of thumbnailImgs.entries()) {
if (event.target === thumbnailImgs[currentThumbnailImg]) {
showCurrentSlide(currentSlide = currentThumbnailImg)
}
}
}
// This function shows the current slide containing an image
function showCurrentSlide (currentSlide) {
for (const slide of slides) {
if (slide.classList.contains('slide_visible')) {
slide.classList.remove('slide_visible')
slide.classList.add('slide_hidden')
} else {
slide.classList.add('slide_hidden')
}
}
slides[currentSlide].classList.remove('slide_hidden')
slides[currentSlide].classList.add('slide_visible')
}
以上都是一个动作,灯箱打开,功能完成任务。
现在我想切换到下一张或上一张图片,但我无法再访问下面函数中需要的currentSlide 变量。
function navigateSlideshowLightbox (event, currentSlide) {
if (previousImgIconClicked) {
currentSlide = (currentSlide - 1 + allSlides) % allSlides
showCurrentSlide(currentSlide)
} else if (nextImgIconClicked) {
currentSlide = (currentSlide + 1) % allSlides
showCurrentSlide(currentSlide)
}
}
我尝试在showCurrentSlide() 中使用return 语句:
return currentSlide
然后在navigateSlideshowLightbox():
currentSlide = showCurrentSlide()
但currentSlide 是undefiend。
【问题讨论】:
-
请注意,由于您在函数中将
currentSlide声明为参数,因此您命名为currentSlide的任何全局变量都不会在这些函数中被识别,设置currentSlide也不会产生任何影响在全局变量上。
标签: javascript parameter-passing