Javascript 为什么是';未定义';

Javascript 为什么是';未定义';,javascript,undefined,Javascript,Undefined,我是JavaScript新手,我只是想理解为什么“z”返回为未定义 var z=functionWithParameters(4,3); 带参数的函数(x,y){ if(typeof z!=“未定义”){ document.getElementById(“functionWithParameters”).innerHTML=z; console.log('内部函数:'+z); log('内部函数:z是一个'+类型的z'); } log('返回前:z='+z); 返回x*y; } log('外部

我是JavaScript新手,我只是想理解为什么“z”返回为未定义

var z=functionWithParameters(4,3);
带参数的函数(x,y){
if(typeof z!=“未定义”){
document.getElementById(“functionWithParameters”).innerHTML=z;
console.log('内部函数:'+z);
log('内部函数:z是一个'+类型的z');
}
log('返回前:z='+z);
返回x*y;
}
log('外部函数:z='+z)

带参数的函数(4,3);
将变量
z
的值设置为带有参数的
函数的返回值。
因此,在函数
functionWithParameters
返回值之前, 变量
z
的值未定义。这是 因为在函数
functionWithParameters
返回值之前,它没有得到任何值

console.log
不起作用的原因是 因为您的脚本有一个活动错误,您的脚本必须停止。

请按照加载/执行DOM的顺序阅读此问题的答案

你写道:

如果我删除了:If(typeof z!=“undefined”),代码结果为[…] 行:console.log('外部函数:z='+z);不执行。我认为这可能是因为函数有一个return语句,但是注释掉返回并没有改变结果

这是因为在加载
p
标记之前执行
functionWithParameters
函数,这会导致
document.getElementById(“functionWithParameters”)
抛出错误,因为您试图查找的
p
标记当时不存在

TypeError: document.getElementById(...) is null[Learn More] (from Firefox)
函数正在抛出异常,因此
z
永远无法获取值。出现此异常的原因是您试图在文档加载完成之前访问元素


解决此问题的一个简单方法是将脚本加载到html文件的底部(在
之前)。

您不了解函数执行流程

        var z = functionWithParameters(4, 3);
        //call functionwithParamarters,and run into function body, 
        //at this time the value of z is undefined, 
        //the if statement block  is not executed,then output z is undefined. 
        //after call functionWithParameters ,z is 12
        function functionWithParameters(x, y) {
            if (typeof z !== "undefined") {
                document.getElementById("functionWithParameters").innerHTML = z;
                console.log('inside function: ' + z);
                console.log('inside function: z is a ' + typeof z);
            }
            console.log('before return: z = ' + z);
            return x * y;
        }
        console.log('outside function: z = ' + z);
        //at this line z is 12
        functionWithParameters(10, 10);
        //z still is 12 , calling functionWithParameters dont change value of z
        //and  if statement block is executed.

我猜是的。因此,
z
没有给定值且未定义。逻辑没有意义。如何在函数内部定义依赖于函数返回的变量?@charlietfl我不知道这个例子,但它在递归关系算法中是有意义的。这可能无关紧要,但是我用这个页面作为参考编写了我的函数:知道undefined@charlietfl抛出这个错误的不是放在
p
标记之后的函数执行。这是他在之后发布的脚本,必须在加载
p
标记之前执行。谢谢,这很有帮助。这是有道理的,我想我应该意识到发生了什么。大家好,感谢所有的反馈。这一切都很有用,但对我来说,这个答案和LineK提供的链接是最有帮助的。我已经预订了这个链接,以防我需要再次引用它。这绝对是正确的答案。Z=函数“functionWithParemters”的返回值,因此在functionWithParemters返回值之前,Z是未定义的。因此,在执行return语句之前,Z是未定义的。在函数内部,z显示为未定义,原因与此相同。我还在HTML头标记中加载javascript。我应该将其加载到正文中吗?@Tony这就是我在回答中的意思,您的代码在加载
p
标记之前执行,因此它在第一次函数运行时不存在,您将在阅读我在回答中链接的答案后理解它。脚本需要位于您要使用的p标记下。所以是的,把剧本放在正文里

//这里的代码哇。。我是这个社区的新成员。我觉得这个社区很酷