<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>刘钢的博客 - 我是UED &#187; 前端技巧</title>
	<atom:link href="http://www.iamued.com/tag/%e5%89%8d%e7%ab%af%e6%8a%80%e5%b7%a7/feed" rel="self" type="application/rss+xml" />
	<link>http://www.iamued.com</link>
	<description>http://www.IamUED.com</description>
	<lastBuildDate>Wed, 18 Jan 2012 02:51:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>浅谈javascript的分号</title>
		<link>http://www.iamued.com/qianduan/734.html</link>
		<comments>http://www.iamued.com/qianduan/734.html#comments</comments>
		<pubDate>Wed, 09 Dec 2009 22:58:24 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[JavaScript脚本]]></category>
		<category><![CDATA[前端开发]]></category>
		<category><![CDATA[分号]]></category>
		<category><![CDATA[前端技巧]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=734</guid>
		<description><![CDATA[javascript的分号代表语句的结束符，但由于javascript具有分号自动插入规则，所以它是一个十分容易让人模糊的东西，在一般情况下，一个换行就会产生一个分号，但实际情况却不然，也就是说在javascript中换行可能产生分号，也可能不产生，是否自动插入分号，主要看上下行。所以即使是经验丰富的程序员，有时候也会头大。 在 ECMAScript 中对分号自动插入规则也有相应的解释：空语句，变量语句，表达式语句，do-while 语句，continue 语句，break 语句，return 语句，以及 throw 语句，这些确定的ECMAScript语句必须以分号结束。这些分号可以总是明确地出现在源代码文本中。为方便起见，在特定的情况下，源代码文本中的这些分号可以被省略。也就是说这些语句的结尾是不需要硬性的输入分号结尾，javascript会自动插入语句结束处。 实践出真理，看一下下面这些例子，就明白，分号自动插入不是那么好让人捉摸的。稍微不注意就会让你头大。 return引起的血案 一个返回a+b值的函数，初看没任何问题，但运行alert的结果却是undefined。根据分号的自动插入规则，return 语句后面如果有换行就会自动插入分号，没有返回值也就比较好理解了。如果需要换行的话，可以这样： 两个闭包引起的血案 很诡异，解释不了，谁能告诉我～ for语句头中的两个分号，不自动插入分号 ECMAScript对以上也有解释：将分号解释为空语句和在for语句中的()中不自动插入分号是特例，是不属于自动插入规则管辖的。   javascript虽然是弱类型语言，ECMAScript的分号自动插入规则也让人难以理解透彻。但养成良好的代码书写习惯，手动插入分号，养成习惯，就能避免这些问题，同时会在程序调试，代码的阅读上对自己对他人都有不小的帮助。 同时ECMAScript还给程序员一些忠告： ++ 或 — 应和其操作数出现在同一行。 return 或 throw 语句中的表达式应和return 或 throw 出现在同一行。 break 或 continue 语句中的标签应和break 或 continue 出现在同一行。]]></description>
			<content:encoded><![CDATA[<p>javascript的分号代表语句的结束符，但由于javascript具有分号自动插入规则，所以它是一个十分容易让人模糊的东西，在一般情况下，一个换行就会产生一个分号，但实际情况却不然，也就是说在javascript中换行可能产生分号，也可能不产生，是否自动插入分号，主要看上下行。所以即使是经验丰富的程序员，有时候也会头大。</p>
<p>在 ECMAScript 中对分号自动插入规则也有相应的解释：空语句，变量语句，表达式语句，do-while 语句，continue 语句，break 语句，return 语句，以及 throw 语句，这些确定的ECMAScript语句必须以分号结束。这些分号可以总是明确地出现在源代码文本中。为方便起见，在特定的情况下，源代码文本中的这些分号可以被省略。也就是说这些语句的结尾是不需要硬性的输入分号结尾，javascript会自动插入语句结束处。</p>
<p>实践出真理，看一下下面这些例子，就明白，分号自动插入不是那么好让人捉摸的。稍微不注意就会让你头大。<br />
<span id="more-734"></span></p>
<p><strong>return引起的血案</strong></p>
<pre class="brush: jscript; title: ; notranslate">
function test(){
   var a = 1;
   var b = 2;
   return //会自动插入分号
       (
         a+b
       )
};
alert(test());
</pre>
<p>一个返回a+b值的函数，初看没任何问题，但运行alert的结果却是undefined。根据分号的自动插入规则，return 语句后面如果有换行就会自动插入分号，没有返回值也就比较好理解了。如果需要换行的话，可以这样：</p>
<pre class="brush: jscript; title: ; notranslate">
function test(){
   var a = 1;
   var b = 2;
   return (
           a+b
          )
};
alert(test());
</pre>
<p><strong>两个闭包引起的血案</strong></p>
<pre class="brush: jscript; title: ; notranslate">
(function (){
  var a;
})() //不会自动插入分号
(function (){
  var b;
})()
</pre>
<p>很诡异，解释不了，谁能告诉我～</p>
<p><strong>for语句头中的两个分号，不自动插入分号</strong></p>
<pre class="brush: jscript; title: ; notranslate">
for( var a=1,b=10 //不会自动插入分号
         a&lt;b //不会自动插入分号
         a++
   )
{}
</pre>
<p>ECMAScript对以上也有解释：将分号解释为空语句和在for语句中的()中不自动插入分号是特例，是不属于自动插入规则管辖的。</p>
<p> </p>
<p>javascript虽然是弱类型语言，ECMAScript的分号自动插入规则也让人难以理解透彻。但养成良好的代码书写习惯，手动插入分号，养成习惯，就能避免这些问题，同时会在程序调试，代码的阅读上对自己对他人都有不小的帮助。</p>
<p><strong>同时ECMAScript还给程序员一些忠告：</strong></p>
<p>++ 或 — 应和其操作数出现在同一行。<br />
return 或 throw 语句中的表达式应和return 或 throw 出现在同一行。<br />
break 或 continue 语句中的标签应和break 或 continue 出现在同一行。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/734.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

