以下代码的输出中有什么“未定义”?

时间:2012-08-01 14:18:34

标签: actionscript-3

正在尝试使用匿名函数:

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

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

trace(a.b())

输出: 你好 未定义

什么是未定义的?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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)

因此您要跟踪a.b的值而不是a.b()的结果值,那么您应该看到“hello”和“Function function”(或类似的东西)作为结果。