Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

关于语句块后面的分号

  语句块后面加不加分号我觉得这应该不是什么大问题吧,我自己是一直都有加分号的。但是看stackoverflow上的大神们都不加分号,而且jQuery也不加分号,这使得我有点很心虚了,现在都开始怀疑自己的逻辑错误,我就来阐述下我的逻辑吧,求调教。
  很多语言中都有语句块的概念,并且他们都是不需要加分号的,C++就是最典型的 int main(){
  if(1){} //这里不用分号
  return 0;
} //这里也不用分号
  现在先不考虑语句块为什么不用加分号,关键是函数定义为什么也不用呢?这是因为C++中的函数后面的大括号也是语句块。函数可以不用大括号直接声明,大括号只是给函数添加函数体的。 int func(); //可以这样定义函数   但是除了语句块以外大括号也有其它用法,比如类的声明和数组的初始化。 class test {}; //这个分号是必须的
int main(){
  int a[]={1,2,3,4}; //这个分号也是必须的
  return 0;
}
  所以可以得出这样一个结论,至少非语句块的大括号都是需要加分号。现在再看看JavaScript呢?在JavaScript中函数是如何定义呢? function test(){}; //即使没有函数体也需要{}
//function test(); //没有这种用法
if(1)/*这里可以插入一个分号,使得if直接结束,分离出后面的语句块,使它总是执行*/{
  //这里是语句块中的语句
} //这里可以不需要分号,因为这个大括号是语句块
  if、for、while,等这些语句会影响它的后一个语句,所以在它之后有多个语句要受其影响时要使用语句块。而在JavaScript的函数定义中,大括号是不可分割的一部分,所以这时的大括号不是语句块。因此我觉得函数定义时需要加上分号。
  现在回头看看语句块,为什么语句块本身不要加分号呢?这个地方我很纠结,因为我总是喜欢在语句块的后面加上分号。但是按照编译器的逻辑,语句本身就是一个完整的语句,它的结束符就意味着这个语句结束了,所以不需要分号来指定结束。但是我觉得这样可能会使代码不容易阅读。比如有个很脑残的题目是这样: {a:1}[0]   这货的值是什么?如果把这个东西alert出来当然是undefined,因为在表达式中大括号可以解析为对象的定义。但是单独存在的大括号会优先被作为语句块来解析所以这货实际上是 {
  a:1;
};
[0];

  虽然这是个很脑残的测试题,但是确实存在这样的问题!如果语句块后面有分号,就不会导致这样的代码误读了。所以我的代码一直都是对语句块的结束位置加分号的。
  当然,label语法是不推荐使用的,而且代码缩进也是严格控制的,优秀的团队能保证所有成员不犯这种低级错误的话当然按照编译的方式是不在代码块后面加分号会更好。我也打算适合向各位大神学习这样的写法了。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^