ActionScript理解度テスト【その1解答編】Code Comprehension(2/2 ページ)

» 2008年05月13日 14時17分 公開
[新藤愛大,ITmedia]
前のページへ 1|2       

問6.参照渡し

function f(a:uint, b:Object):void

{

    a = 1;

    b.n = 2;

}


var n:uint = 0;

var o:Object = new Object();

o.n = 0;


f(n, o);


trace(n);

trace(o.n);


出力

0

2


 プリミティブ型(数値など)は値渡し、複合型(オブジェクトなど)は参照渡しされます。値渡しされた変数をいじっても元の変数は変化しませんが、参照渡しされた変数をいじると元の変数にも反映されます。

問7.ECMAScriptにおけるブロック

var a:uint = 1;

{

    var a:uint = 2;

    trace(a);

}

trace(a);


出力

2

2


 他言語に慣れている人にとっては予期しない結果かもしれませんが、ECMAScriptのブロックには新しいスコープを生成する機能はありません。

問8.デフォルト値

var a:Number;

var b:int;

var c:uint;

var d:Boolean;

var e:Object;


trace(a);

trace(b);

trace(c);

trace(d);

trace(e);


出力

NaN

0

0

false

null


 それぞれの型のデフォルト値です。同じ数値型でも、Numberとint/uintではデフォルト値が違います。

問9.クロージャ

function f(g:Function):void

{

    var b:uint = 2;

    g();

}


var a:uint = 0;

var b:uint = 1;

f(function ():void

{

    trace(a);

    trace(b);

});


出力

0

1


 ECMAScriptのクロージャは、「定義された位置に基づいて」決定されます。なので無名関数はグローバル上の変数しか参照できず、関数f内の変数bは参照できません。

問10.as演算子

var obj:Object = [1, 2, 3];


trace(obj as Array);

trace(obj as Number);

trace(obj as String);


出力

1,2,3

null

null


 ActionScript3から導入されたas演算子は、キャストのための演算子です。通常のキャストとの違いは、キャスト不可能な型が与えられた場合、TypeErrorがスローされるのではなく、nullが返るところです。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ