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真是干了一件利民利国的好事啊~~
函数定义作用域
最新推荐文章于 2021-05-16 02:05:22 发布