Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中传递参数时出现问题_Javascript_Parameter Passing - Fatal编程技术网

在JavaScript中传递参数时出现问题

在JavaScript中传递参数时出现问题,javascript,parameter-passing,Javascript,Parameter Passing,我有一个带幻灯片库的整版lightbox,我正在尝试重构我的代码,这样我就不必使用全局变量。在函数之间传递一个变量作为参数时,我遇到了困难。当我打开lightbox gallery时,一切都很好:正确的图像被看到,计数器中的数字被显示出来。当我想切换到下一个或上一个图像时,问题就开始了。我无法访问存储或存储lightbox打开时看到的当前图像的变量。 我正在发布没有变量声明的简化代码 // This is a function which opens the lightbox with the

我有一个带幻灯片库的整版lightbox,我正在尝试重构我的代码,这样我就不必使用全局变量。在函数之间传递一个变量作为参数时,我遇到了困难。当我打开lightbox gallery时,一切都很好:正确的图像被看到,计数器中的数字被显示出来。当我想切换到下一个或上一个图像时,问题就开始了。我无法访问存储或存储lightbox打开时看到的当前图像的变量。 我正在发布没有变量声明的简化代码

// 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')
}
所有这些都是一个动作,lightbox打开,函数完成它们的任务

现在我想切换到下一个或上一个图像,但我无法再访问下面函数中所需的
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
语句:

然后在
导航滑动显示灯箱()
中:

但是
当前幻灯片
未定义的


(这实际上应该是一个评论,但没有足够的空间来回答问题)

语句
currentSlide=showCurrentSlide()
可能没有任何作用,因为
showCurrentSlide()
没有返回值。返回值:

函数showCurrentSlide(currentSlide){
用于(连续幻灯片){
if(slide.classList.contains('slide_visible')){
slide.classList.remove('slide\u visible')
slide.classList.add('slide\u hidden')
}否则{
slide.classList.add('slide\u hidden')
}
}
幻灯片[currentSlide].classList.remove('slide_hidden')
幻灯片[currentSlide].classList.add('slide\u visible')
返回电流;
}
您的函数
NavigatesSlideShowLightBox()
也应该
返回currentSlide
,因为它正在修改它,对吗?
您的书面描述说您试图使用return,但它不起作用-按您的方式发布代码,而不是按您希望的方式发布代码

另一个好奇:

showCurrentSlide(currentSlide=currentThumbnailImg)

我宁愿写两行

currentSlide=currentThumbnailImg;
showCurrentSlide(当前幻灯片);
在当前代码中,您不需要结果,那么为什么不直接提供该值呢

showCurrentSlide(currentThumbnailImg);
(这实际上应该是一个注释,但是没有足够的空间来回答问题)

语句
currentSlide=showCurrentSlide()
可能没有任何作用,因为
showCurrentSlide()
没有返回值。返回值:

函数showCurrentSlide(currentSlide){
用于(连续幻灯片){
if(slide.classList.contains('slide_visible')){
slide.classList.remove('slide\u visible')
slide.classList.add('slide\u hidden')
}否则{
slide.classList.add('slide\u hidden')
}
}
幻灯片[currentSlide].classList.remove('slide_hidden')
幻灯片[currentSlide].classList.add('slide\u visible')
返回电流;
}
您的函数
NavigatesSlideShowLightBox()
也应该
返回currentSlide
,因为它正在修改它,对吗?
您的书面描述说您试图使用return,但它不起作用-按您的方式发布代码,而不是按您希望的方式发布代码

另一个好奇:

showCurrentSlide(currentSlide=currentThumbnailImg)

我宁愿写两行

currentSlide=currentThumbnailImg;
showCurrentSlide(当前幻灯片);
在当前代码中,您不需要结果,那么为什么不直接提供该值呢

showCurrentSlide(currentThumbnailImg);

currentSlide=showCurrentSlide()
如果不将参数传递给
showCurrentSlide()
函数,即使添加
return
语句,也将始终返回
未定义的
。您需要在此处传递一个参数,例如
currentSlide=showCurrentSlide(theSlide)
。或者,您也可以将以下操作作为快速简单的解决方案

在以下函数中,由于您已经在使用
slides
对象,因此只需将当前幻灯片添加到末尾的
slides
对象中,以备以后使用:

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')
    slides.lastActiveSlide = currentSlide // Adding it here
}
然后,当您运行
navigateSlideshowLightbox()
函数时,您只需访问该对象属性,而不必依赖参数

function navigateSlideshowLightbox (event) {
    if (previousImgIconClicked) {
        const currentSlide = (slides.lastActiveSlide - 1 + allSlides) % allSlides
        showCurrentSlide(currentSlide)
    } else if (nextImgIconClicked) {
        const currentSlide = (slides.lastActiveSlide + 1) % allSlides
        showCurrentSlide(currentSlide)
    }
}

currentSlide=showCurrentSlide()
如果未将参数传递给
showCurrentSlide()
函数,即使添加了
return
语句,也将始终返回
undefined
。您需要在此处传递一个参数,例如
currentSlide=showCurrentSlide(theSlide)
。或者,您也可以将以下操作作为快速简单的解决方案

在以下函数中,由于您已经在使用
slides
对象,因此只需将当前幻灯片添加到末尾的
slides
对象中,以备以后使用:

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')
    slides.lastActiveSlide = currentSlide // Adding it here
}
然后,当您运行
navigateSlideshowLightbox()
函数时,您只需访问该对象属性,而不必依赖参数

function navigateSlideshowLightbox (event) {
    if (previousImgIconClicked) {
        const currentSlide = (slides.lastActiveSlide - 1 + allSlides) % allSlides
        showCurrentSlide(currentSlide)
    } else if (nextImgIconClicked) {
        const currentSlide = (slides.lastActiveSlide + 1) % allSlides
        showCurrentSlide(currentSlide)
    }
}

实际上不需要使用参数。当
navigateSlideshowLightbox()
执行与
openSlideshowLightbox()
不同的任务时,我迭代了
navigateSlideshowLightbox()
中的所有幻灯片,通过检查当前看到的幻灯片,我获得了幻灯片所需的索引位置,然后将其分配给
currentSlide
变量

function navigateSlideshowLightbox () {
    if (previousImgIconClicked) {
        for (const [slideVisible] of slides.entries()) {
          if (slides[slideVisible].classList.contains('slide_visible')) {
            currentSlide = (slideVisible - 1 + allSlides) % allSlides
          }
        }
        showCurrentSlide(currentSlide)
    } else if (nextImgIconClicked) {
        //  Here comes the same 'for' loop with if statement as above.
        currentSlide = (slideVisible + 1) % allSlides
        showCurrentSlide(currentSlide)
    }

实际上不需要使用参数。当
navigateSlideshowLightbox()
执行与
openSlideshowLightbox()
不同的任务时,我迭代了
navigateSlideshowLightbox()
中的所有幻灯片,通过检查当前看到的幻灯片,我获得了幻灯片所需的索引位置,然后将其分配给
currentSlide
varia