skip to main |skip to sidebar

2007-07-08

AS3.0的动态语言特性(2) - 变量声明的省略

AS3.0的动态语言特性(1) - 类型检查

去掉strict模式,AS3.0的自由度大大提高了。 但 ”With great power comes great responsibility”选择越大,风险也越大

不用var来初始化变量

不管是 Flash CS3 还是 Flex2 ,去掉strict模式后就可以不用var来初始化变量。比如以下代码就可以通过编译。


public class Foo {
 public function setMyGlobal(val:int):void {
  i = val;
 }
 public function printMyGlobal():void {
  trace(i);
 }
}

以下代码会正常工作。

var foo:Foo = new Foo();
foo.setMyGlobal(10);
foo.printMyGlobal(); // ->10

但不调用setMyGlobal(),直接调用printMyGlobal()的话,执行时,会弹出i未定义的错误。

var foo:Foo = new Foo();
foo.printMyGlobal(); // 执行时错误

这是因为没有在setMyGlobal()里初始化i


public function setMyGlobal(val:int):void {
 i = val;  // 最先执行这一行时初始化i。
}

不用var声明的变量的作用域

var foo1:Foo = new Foo();
var foo2:Foo = new Foo();
 
foo1.setMyGlobal(10);
foo2.printMyGlobal(); // ->10

foo1里设定的值,在foo2里也能参照。也就是说不用var声明的变量是在实例间共用的

没有评论: