2011-12-14 73 views
20

我发现了下面的js示例,并且语法混淆了。注意这些语句用逗号分隔而不是分号。逗号是js中的有效语句分隔符吗?我以前没见过这个。用逗号分隔的JS语句分隔符

$('selector').each(function() { 

      this.onclick = function() { 
       this.select(); 
      }, 

      this.onblur = function() { 
      }, 

      this.onfocus = function() { 
      }, 

      this.onkeyup = function() { 
      } 
    }); 

回答

18

逗号充当单个表达式语句中表达式之间的分隔符。因此,(如果它已经完成,而不是在“onkeyup”函数之后被切断)只是一个表达式语句。

真的没有理由这样的代码,或至少没有真正的理由。在这种特殊情况下,它与以分号分隔的一系列单独的表达式语句具有基本相同的效果。

逗号“经营者”在许多情况下,有问题的,但有时非常有用:

var index, len; 
for (index = 0, len = list.length; index < len; ++index) { ... } 

例如。它允许将多个表达式(通常为赋值)放入只允许一个表达式的语法区域设置中。在我看来,这确实是语法上的弱点。

+4

注意:如果有人对逗号运算符感兴趣 - 请参阅[this](http://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/)。 – kubetz 2011-12-14 14:50:13

9

每个赋值实际上是一个表达式(不是语句);表达式可以连接成一个更大的表达式,其最终值只是最后一个子表达式的值;例如

alert( (w=1+1, x=2+3, y=3+3, z=4+4) ); // shows 8 

尽管您显示的代码是有效的,但我认为这不是一个好的模式。我会将其更改为分号。