javascript 返回函数返回未定义

标签 javascript return expression

谁能解释为什么我的三个示例函数中的第一个 (ref failFunc()) 应该返回一个未定义的值而不是一个有效的字符串?

我知道我可以通过将表达式括在括号中 (ref worksFunc1()) 或将结果放在中间变量中 (ref worksFunc2()) 来解决问题但第一个函数未能返回字符串这一事实与我在其他编程语言中所经历的任何事情背道而驰。

fiddle 在这里: http://jsfiddle.net/BloodBaz/zGLmy/

JavaScript:

var rs = {};

rs.failFunc = function(n)
{
    var h = "0010";
    var m = "15";
    var s = "12";
    var c = "10";

    return 
        h.substr(h.length - 4) + ":" + 
        m.substr(m.length - 2) + ":" + 
        s.substr(s.length - 2) + "." + 
        c.substr(c.length - 2);
}
rs.worksFunc1 = function(n)
{
    var h = "0010";
    var m = "15";
    var s = "12";
    var c = "10";

    return (
        h.substr(h.length - 4) + ":" + 
        m.substr(m.length - 2) + ":" + 
        s.substr(s.length - 2) + "." + 
        c.substr(c.length - 2));
}
rs.worksFunc2 = function(n)
{
    var h = "0010";
    var m = "15";
    var s = "12";
    var c = "10";

    var res =
        h.substr(h.length - 4) + ":" + 
        m.substr(m.length - 2) + ":" + 
        s.substr(s.length - 2) + "." + 
        c.substr(c.length - 2);
    return res;
}


var res = rs.failFunc();
document.getElementById('output1').innerHTML = res;
var res = rs.worksFunc1();
document.getElementById('output2').innerHTML = res;
var res = rs.worksFunc2();
document.getElementById('output3').innerHTML = res;

HTML:

<div id='output1'>output</div>
<div id='output2'>output</div>
<div id='output3'>output</div>

输出:

undefined
0010:15:12.10
0010:15:12.10

最佳答案

JavaScript 语法很奇怪。一个特别奇怪的部分是 return 语句后跟一个换行符被认为是 return;。没有表达式的 return 意味着对于调用者来说,返回值是 undefined

因此,

return 
    h.substr(h.length - 4) + ":" + 
    m.substr(m.length - 2) + ":" + 
    s.substr(s.length - 2) + "." + 
    c.substr(c.length - 2);

实际上等同于

return;
    h.substr(h.length - 4) + ":" + 
    m.substr(m.length - 2) + ":" + 
    s.substr(s.length - 2) + "." + 
    c.substr(c.length - 2);

Read all about it in the language spec.

关于javascript 返回函数返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24680786/

相关文章:

javascript - 使 html 按钮显示为文本

javascript - jQuery 验证引擎属性不起作用

python - 调用自身的函数仅返回其调用的第一个结果

C++ 值在常量表达式中不可用

grails - 在Web流中使用Grails属性表达式而不是域对象?

javascript - 如果删除了对应的rails View 模板,还可以删除js文件吗?

javascript - 在 RAW 中添加 d3.js 交互式可缩放树形图

jquery - 从 jquery ajax 调用分配变量返回未定义

PHP 函数/方法返回 bool 结果和状态消息

c# - 使用对象初始值设定项创建实例的表达式