<?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>welefen的随笔</title>
	<atom:link href="http://www.welefen.com/tag/finally/feed" rel="self" type="application/rss+xml" />
	<link>http://www.welefen.com</link>
	<description>前端打杂者@baidu</description>
	<lastBuildDate>Tue, 07 Feb 2012 07:28:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>javascript中关于try,finally控制语句的使用</title>
		<link>http://www.welefen.com/javascript-try-finally.html</link>
		<comments>http://www.welefen.com/javascript-try-finally.html#comments</comments>
		<pubDate>Mon, 26 Oct 2009 15:17:40 +0000</pubDate>
		<dc:creator>welefen</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[finally]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[try]]></category>

		<guid isPermaLink="false">http://www.welefen.com/?p=47</guid>
		<description><![CDATA[几乎每个脚本语言都有try,catch,finally控制语句。try,catch控制语句主要是对有异常的程序控制，这里不在详细描述。主要讲述下try,finally的妙用。 在正文之前，给出2个已有的两个应用（2篇文章都是在51JS中），如下： 1、try finally 妙用,防止内存泄漏。 2、月影发的“某人发给我的邪恶代码”，可以看#16楼 lifesinger的回复。 问题的表面 也许你对上面2个应用还没有真正的明白，也可能你看到这样的代码心里忍不住和我一样惊叹一声“绝”。那么为什么能够写出这样的代码，这样的代码又是怎样工作的呢？一切从ECMA-262开始说起。 揭开面纱 如果你还不知道什么是ECMA-262或者还没有阅读过这个标准，那么我建议你还是尽快花点时间好好看看，有兴趣更要研究。你可以从它的官方网站下载，如果不想看PDF版本的话可以打印出来的。我以前看的时候就是打印出来慢慢研究的。 在ECMA262的12.14 (P70)The try statement有： The production TryStatement : try Block Finally is evaluated as follows: 1. Evaluate Block. 2. Evaluate Finally. 3. If Result(2) .type is normal, return Result(1). 4. Return Result(2). 上述中第一步和第二部分别是计算Block和Finally的值。第三步是进行第二步结果类型的判断，如果类型是normal的话，返回第一步的结果否则返回第二步的结果。 这里有两点比较特殊，一个是返回结果在进行计算Finally块后才进行的，二是第二步的结果类型是normal的时候，返回第一步的结果，否则返回第一步的结果。 对于第一点，前面的防止内存泄露就是一个很好的应用。充分使用了这一特性。 那第二步的结果类型什么时候是normal呢。这里的类型是实现JS引擎层面上的类型，用JS是获取不到的。 JS引擎层面的类型在ECMA262中的8.9进行了定义： 8.9 The Completion Type The internal Completion [...]]]></description>
		<wfw:commentRss>http://www.welefen.com/javascript-try-finally.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using eaccelerator
Database Caching 1/9 queries in 0.005 seconds using disk: basic
Object Caching 319/330 objects using disk: basic

Served from: welefen.com @ 2012-02-08 03:32:04 -->
