0

匿名関数を試しています:

var a:Object = new Object() ;
a.b = new Function()

a.b =function()
{
    trace("hello");
}

trace(a.b())

出力: 未定義のこんにちは

何が未定義ですか??

4

2 に答える 2

1

実行中の 2 つのトレース ステートメントがあります。

trace("hello");

trace(a.b());

あなたが呼び出すと、trace(a.b())最初a.b()に呼び出されます。a.bは単にこの関数です:

function()
{
    trace("hello");
}

これが実行され、「hello」が出力されます。

ここで、2 番目の trace( trace(a.b()) が の結果を出力しようとしますa.b()。問題は、 で何も返さないa.b()ため、結果が未定義であることです。

編集: JonatanHedborg がコメントで指摘してa.b = new Function()いるように、次の行で上書きするため、この行は実際には必要ありません。

これを次のように変更すると:

var a:Object = new Object() ;

a.b = function()
{
    return "Hello";
}

trace(a.b())

出力として「hello」が表示されるはずです。

または、これを次のように変更した場合:

var a:Object = new Object() ;

a.b = function()
{
    trace("hello");
}

trace(a.b)

ab() の結果の値の代わりに ab の値をトレースしているように、結果として「hello」と「Function function」(または類似のもの) が表示されるはずです。

于 2012-08-01T14:25:44.030 に答える
1

関数「b」の戻り値です。

于 2012-08-01T14:23:54.253 に答える