currentPosition似乎永远不会留下1?

时间:2012-03-05 16:18:54

标签: javascript

我已经编写了一个小函数,它基本上将currentPosition值作为一个参数,如果该数字等于幻灯片的总数,并且如果它不是将值加1,遗憾的是,虽然我的增量数字似乎永远不会移动来自1.任何人都可以告诉我哪里可能出错了吗?

var currentPosition = 0;
            var slideWidth = 320;
            var numberOfSlides = sliderSlides.children.length;
            console.log('Number of slides = ', numberOfSlides);

            //Remove scrollbar in js
            sliderCtn.style.overflow = 'hidden';  

            //Set .slides width equal to total width of all slides
            sliderSlides.style.width = slideWidth * numberOfSlides + 'px';                      

            // Direction click handlers
            sliderDirNext[det.clickEvent] = function(e) {               
                next(currentPosition);
                sliderSlides.style.left = slideWidth*(-currentPosition) + 'px';         
                console.log('Slide width ', slideWidth);
                stopEvent(e);
            };

 function next(currentPosition){
                    if( currentPosition === numberOfSlides ) {
                        return false;
                    } else {
                        currentPosition += 1;
                        console.log('Next current position = ', currentPosition);
                        return true;
                    }
                } 

3 个答案:

答案 0 :(得分:5)

解。 但是,如果您提供更多上下文 ,则最有可能更好一个:

window.currentPosition = 0;

function next(){
    if( currentPosition === numberOfSlides ) {
        return false;
    } else {
        currentPosition += 1;
        console.log('Next current position = ', currentPosition);
        return true;
    }
} 

OP更新后

只需删除next函数currentPosition参数即可解决您的问题,因为其他逻辑是合理的。

答案 1 :(得分:1)

参数的值永远不会在函数之外递增,因为基元是按值传递的,而不是通过引用传递的。

要解决您的问题,您可以让函数返回一个布尔值,并在函数返回true时递增值:

if (next(currentPosition))
    ++currentPosition;

或者你可以摆脱这个功能,只需将代码内联。

答案 2 :(得分:1)

您只是递增变量的本地副本(在函数范围内)。因此,对next的下一次调用会获取原始变量的新副本并重新开始。

要拥有一个真正的计数器,你可以引入一个全局变量(可能在某个命名空间内),然后在函数中修改它,比如

var slider = {
  curPos: 0,
  next: function() {
    if( this.curPos === numberOfSlides ) {
      return false;
    } else {
      this.curPos += 1;
      console.log('Next current position = ', this.curPos );
      return true;
    }
  }
}

另一种可能性是使用闭包。

function getCounter() {
  var curPos = 1;
  return function() {
        if( curPos === numberOfSlides ) {
          return false;
        } else {
          curPos += 1;
          console.log('Next current position = ', curPos );
          return true;
        }
  };
}

var next = getCounter();
next();