0

我正在尝试一个匿名函数:

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

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

trace(a.b())

输出:你好未定义

什么未定义??

4

2 回答 2

1

它是函数“b”的返回值。

于 2012-08-01T14:23:54.253 回答
1

您有两个正在运行的跟踪语句:

trace("hello");

trace(a.b());

当您trace(a.b())首先a.b()调用时。a.b就是这个功能:

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

这样运行并输出“你好”。

现在第二个跟踪 ( 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 回答