FOR循环中的逗号运算符,它是如何工作的?
Posted
技术标签:
【中文标题】FOR循环中的逗号运算符,它是如何工作的?【英文标题】:Comma operator in FOR loop, how does that work? 【发布时间】:2012-01-23 02:37:47 【问题描述】:谁能解释一下 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++”这样的语句似乎不见了,我从来没有见过这样的东西。这意味着什么?谢谢!
【问题讨论】:
@amnotiam 那是什么?如果需要,我可以正确标记它。 不确定。逗号在 JS 中也是一样的,但是 JS 没有静态类型变量。 它是js,我知道这是事实;) @user1015551: JS 没有int
。
啊该死,我的错,我用 C# 重写它并复制了错误的代码,哈哈
【参考方案1】:
逗号只是为多个声明添加分隔符。换句话说,您的for
循环设置a
等于x
,以及e
等于y
。
关于增量语句的缺失,它缺失的事实只是意味着for
循环不会显式地增加任何变量。
【讨论】:
谢谢。此外,循环内部还有另一个“c”定义。变量 c = c/10;如果 c 已经在代码的前面声明了,这怎么可能?这是否意味着它被视为一个新变量,并且在新定义之后的循环中旧 c 被忽略? @user1015551 不是真的。它没有将c
视为一个新变量,它只是将c/10
的值分配回c
。所以换句话说,如果c
等于200
,而你说c = c / 10;
,你基本上就是在说c = 200 / 10;
。有意义吗?
是的,谢谢。那么为什么代码在循环中有'var c ='而不是简单的'c ='。在这种情况下使用 var 是否有任何其他含义,或者它可能不存在?
javascript 是松散类型的,它没有强制使用var
,但是不使用 var 是不好的做法。 "use strict";
要求声明将标量分配给变量。
如果你不在 JavaScript 中使用 var
,那么你就声明了一个不好的全局变量(这就是为什么 strict 要求使用 var
)。并且 JavaScript 具有函数作用域,因此函数内声明的任何变量都可以在函数中的任何位置访问,即循环内声明的变量也可以在循环外访问(但只能在函数内)。【参考方案2】:
逗号仅允许您在循环开始时初始化多个变量。而缺少的自增操作符意味着循环内一定有一些脚本最终会满足终止条件,否则循环永远不会完成。
【讨论】:
谢谢!这是否意味着这里没有定义条件?或者条件是 c @user1015551 条件定义为0 < c
,因此只要 c 大于零,循环就会继续。大概循环内的某处 c 正在递减,最终将等于 0 并且循环将退出。【参考方案3】:
C、C++ 和 JavaScript(可能是 C#)中的逗号操作符是这样工作的:
comma_operator(statement_1, statement_2)
execute statement_1
return statement_2
因此,在您的循环中,它会初始化两个整数值a
和e
,它们分别设置为x
和y
。没有增量,因为循环正在与 c
进行比较,这可能设置在循环内的某个位置。
【讨论】:
不知道 C 或 C++,但逗号操作符的工作方式类似于 javascript 中的 this。它分隔表达式,而不是语句。你可以写var x, y;
,这是一个语句,你不能写var x, var y;
,这是两个必须用分号隔开的语句。以上是关于FOR循环中的逗号运算符,它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章