【问题标题】:Multiple counters in Javascript for loopJavascript for循环中的多个计数器
【发布时间】:2012-01-11 00:54:07
【问题描述】:

在我扯掉头发并在调试方面走错路之前。有人可以确认此代码将按预期进行。 IE。将 5 个 div 动画到不同的位置:

var i, j, k;
$('#menuButton').click(function(){
    for (i=1; j=0; k=150; i<=5; i++; j+=30; k-=30){
        $('.spinner #item' + i).animate({
            left: '+=' + j,
            bottom: '+=' + k
          }, 500, function() {
            // Animation complete.
        });
    }
});

当我点击#menuButton 时,什么也没有发生,我得到这个错误:

Uncaught SyntaxError: Unexpected token ;在'for()' 行...

【问题讨论】:

  • 一个 for 循环只需要三个表达式。您可能希望在变量赋值之间使用,; 用于分隔初始赋值、条件和每次迭代后要运行的表达式。
  • 为什么要增加三个不同的变量而不是增加一个并乘以其他值? jsfiddle.net/jasper/7fkx7/2
  • @Jasper 我非常喜欢这个,但它不太符合我的要求,我需要从我定义的值开始......
  • @benhowdle89 明白了。我看到这种语法在这种情况下很容易使用。但是您可以将初始值添加到每个乘法:jsfiddle.net/jasper/7fkx7/3bottom : '+=' + (i * -30 + 150)。就像他们在高中教你代数一样:)...ax+c(其中c 是你的常数,a 是你的斜率/速率)
  • @Jasper 太棒了!!!出于兴趣,我将如何应用稍微弯曲的效果,而不仅仅是一行...

标签: javascript jquery for-loop


【解决方案1】:

你有一些分号需要逗号:

for (i=1, j=0, k=150; i<=5; i++, j+=30, k-=30) { /* do work */ }

for 中应该只有三个“声明”

for( [init]; [test]; [increments]) { [block] }

要执行多个[inits][increments],有时您必须使用magical, but oft forgotten, comma operator

【讨论】:

    【解决方案2】:

    分号太多

    for (i=1; j=0; k=150; i<=5; i++; j+=30; k-=30){
    

    应该是

    for (i=1, j=0, k=150; i<=5; i++, j+=30, k-=30){
    

    【讨论】:

      【解决方案3】:

      如果您使用static code analysis tools such as the lovely JSHint,您很容易发现代码中的语法错误。

      另外,你应该进一步了解comma operator在JavaScript中的使用,我们的网站有a few answers on it already

      【讨论】:

        猜你喜欢
        • 2020-05-31
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        相关资源
        最近更新 更多