函数定义作用域

10 篇文章 0 订阅
1 篇文章 0 订阅
t();



if (true) {

	t();

	function innerFunc():void

	{

	}

	var innerFunc2:Function = function ():void

	{

	

	};

	t();

}



function outFunc():void

{

}

var outFunc2:Function = function ():void

{



};



t();



function t():void

{

	trace('outFunc: ' + outFunc);

	trace('outFunc2: ' + outFunc2);

	trace('innerFunc: ' + innerFunc);

	trace('innerFunc2: ' + innerFunc2);

	trace('---------------------------');

}
猜猜上面输出会是什么结果? 在as3里面,输出比较合理,function定义的是编译期函数,所以,在运行期运行trace,都能找到outFunc和innerFunc,哪怕if条件是false,innerFunc也已经存在了。而outFunc2和innerFunc2都是动态定义的,所以只有在定义了以后再trace,才能得到输出,否则就是null,而且if如果是false的话,innerFunc2是不会被定义的。 但这在之前的as版本里面就怪异了,其他都好理解,最特别的是 function innerFunc(){},如果是在条件语句中这么定义,无论哪里trace都只能得到undefined,用asv一看,发现竟然没有innerFunc,我只能再次鄙视一下as2时期的flash编译器了,一个条件状语就把丫给骗了/-_-/ 其实无需条件语句,只需用'{}'花括号,开一个新的作用域,编译器就sb了。 所以,对于as2到as3的升级,我觉得adobe真是干了一件利民利国的好事啊~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值