try catchでスコープが可能!?

by coppieee
iに注目
偶然にもtry catchでもスコープがあることを発見した。
catch(i:int)で宣言しているiのスコープはtry catchの中でしか見えない。
つまりiにcatchでスコープが発生していることになる。
何でこうなるかはわかんない
くれぐれも遊び以外では使わないように
@author coppieee
♥2 | Line 28 | Modified 2009-08-29 00:04:16 | MIT License
play

ActionScript3 source code

/**
 * Copyright coppieee ( http://wonderfl.net/user/coppieee )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/aeyI
 */

//iに注目
//偶然にもtry catchでもスコープがあることを発見した。
//catch(i:int)で宣言しているiのスコープはtry catchの中でしか見えない。
//つまりiにcatchでスコープが発生していることになる。
//何でこうなるかはわかんない
//
//くれぐれも遊び以外では使わないように
//@author coppieee
package 
{
	import flash.display.Sprite;
	import flash.text.TextField;
	
	public class Main extends Sprite 
	{
		public function Main():void 
		{
			var xs:Array = [];
			try { throw 0; } catch (i:int) {
				for (; i < 5; i++ )
				{
					xs.push(i);
				}
			}
			var sum:int = 0;
			try { throw 0; } catch (i:int) {
				for (; i < xs.length; i++ )
				{
					sum += xs[i];
				}
			}
			var tf:TextField = new TextField();
			addChild(tf);
			tf.text = "sum" + sum;
			//trace(i);//コンパイルエラー
			
		}
	}
}