JavaScript:在函数内调用方法会输出未定义的结果

JavaScript:在函数内调用方法会输出未定义的结果,javascript,javascript-objects,Javascript,Javascript Objects,我是JavaScript的新手。我在试验对象方法,并用全局函数调用它们。我的问题是:当我在函数中调用该方法时,它会在最后输出未定义的结果和答案。为什么 function ShowMessage(msg) { if(arguments.length == 1) { document.getElementById("message").innerHTML += "<p><i>"+msg+"</i></p>"; }

我是JavaScript的新手。我在试验对象方法,并用全局函数调用它们。我的问题是:当我在函数中调用该方法时,它会在最后输出未定义的结果和答案。为什么

function ShowMessage(msg)
{
    if(arguments.length == 1)
    {
        document.getElementById("message").innerHTML += "<p><i>"+msg+"</i></p>";
    }
}

var obj = obj || {};

obj.property1 = "Hello1";    

obj.method1 = function(msg)
{
    document.getElementById("message").innerHTML +="<p><b>"+msg+"</b></p>";
}
var catalyst = obj.method1(obj.property1);
ShowMessage(catalyst);
看看

obj.method1 = function(msg)
{
    document.getElementById("message").innerHTML +="<p><b>"+msg+"</b></p>";
}
将定义一个不自动分配任何内容的变量catalyst。它被传递到ShowMessage,然后打印“undefined”(未定义)

更改:

obj.method1 = function(msg)
{
    document.getElementById("message").innerHTML +="<p><b>"+msg+"</b></p>";

    return msg;
}
obj.method1=函数(msg)
{
document.getElementById(“message”).innerHTML+=“”+msg+”

”; 返回味精; }
函数可以返回值,但默认情况下,它们返回
未定义的值。例如:

function logSomething(){ console.log(arguments); }
logSomething
返回
undefined
,因为实际返回任何内容都没有意义。函数将被调用,但没有人询问它要说什么

(如果你想用C等其他语言来描述这个函数,你可以将它定义为
func logSomething->Void
,其中
->
指示函数将返回什么,在这种情况下,它将返回到Void中,你可以想象这就像在外太空中喊叫一样。你执行一个喊叫,但没有人会听到。)

multiply
返回mutliping
a
b
的值。调用此函数时,您希望返回一些内容。如果你做
var c=multiply(2,3)
您希望c不是
未定义的
,而是
6
。在我们前面提到的空间叫喊功能中,您实际上希望有人听到您的声音。这将是
multiply->Int

在编程中,有些函数有返回值时很有用,而有些函数没有。如果未定义
return
语句,则返回的值将默认为
undefined

在您的示例中,您正在修改DOM,实际上并不希望返回一个值,因此当您记录结果时,它将是
未定义的


请查看MDN中的
return
语句文档:

您的函数不返回任何内容,请使用
return
关键字,此时您的函数将传回一些内容。你可以归还你想要的任何东西,我不知道你在期待什么,但这就是要点。更多信息:这是因为
method1
没有
return
语句,所以返回
undefined
obj.method1 = function(msg)
{
    document.getElementById("message").innerHTML +="<p><b>"+msg+"</b></p>";

    return msg;
}
function logSomething(){ console.log(arguments); }
function multiply(a, b){ return a * b; }