2012-01-23 42 views
2

任何人都可以在FOR语句中解释逗号运算符吗?FOR循环中的逗号运算符,这是如何工作的?

function funct_1(c){ 
    for (var a = x, e = y; 0 < c;){ 
     var p = c/2; 
     var c = c/10; // wtf, it is already defined as function argument!! 
    } 
} 

此外,像“A ++”的最后一条语句似乎缺少,我从来没有见过这样的事。那是什么意思?谢谢!

+1

这不是JavaScript, – 2012-01-23 02:47:06

+0

@amnotiam那是什么呢?如果需要,我可以正确标记它。 –

+0

不确定。逗号将在JS中工作,但JS没有静态类型的变量。 – 2012-01-23 02:49:06

回答

2

逗号只是为多个声明添加了分隔符。换句话说,您的for循环设置为a等于x,以及e等于y

至于缺少增量语句,它丢失的事实意味着for循环不会明确地增加任何变量。

+0

谢谢。循环里还有'c'的另一个定义。 var c = c/10;如果c已经在代码中早些时候声明了,那怎么可能呢?这是否意味着它被视为一个新变量,并且旧的c在新定义之后的循环内被忽略? – user1015551

+0

@ user1015551不是真的。它不会将'c'视为一个新变量,它只是将'c/10'的值赋给'c'。换句话说,如果'c'等于'200',并且你说'c = c/10;',那么你基本上是在说'c = 200/10;'。合理? – 2012-01-23 02:58:28

+0

是的,谢谢你。那为什么代码在循环内部有'var c ='而不是简单的'c ='。在这种情况下使用var是否有其他含义,或者它可能不在那里? – user1015551

0

在C,C++,和JavaScript(也许C#)的逗号操作是这样的:

comma_operator(statement_1, statement_2) { 
    execute statement_1 
    return statement_2 
} 

所以,在你的循环,它初始化两个整数值,ae,而被设定为了xy。没有增量,因为循环与c进行比较,该值可能设置在循环内的某处。

+1

不知道C或C++,但逗号操作符像[this](http://es5.github.com/#x11)。 14)在JavaScript中。它分隔**表达式**,而不是语句。你可以编写'var x,y;'这是一个语句,你不能写'var x,var y;'这是两个必须用分号隔开的语句。 – RobG

1

逗号只允许您在循环开始时初始化多个变量。而缺少增量运算符意味着循环内必须有一些脚本最终满足终止条件,否则循环将永远不会完成。

+0

谢谢!这是否意味着这里没有定义条件?或者条件是c <0? – user1015551

+0

@ user1015551条件被定义为'0

+0

谢谢你,我欣赏它! – user1015551