谁能解释为什么我的三个示例函数中的第一个 (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);
关于javascript 返回函数返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24680786/