2014-07-10 4 views
1

내 세 샘플 함수 중 첫 번째 함수 (ref failFunc())가 유효한 문자열이 아닌 정의되지 않은 값을 반환해야하는 이유를 설명 할 수 있습니까?javascript return 함수는 undefined를 반환합니다.

대괄호 (ref worksFunc1())의 표현식을 래핑하거나 결과를 중간 변수 (ref worksFunc2())에 배치하여 문제를 해결할 수 있지만 첫 번째 함수가 문자열을 반환하지 못했다는 사실은 다른 프로그래밍 언어로 경험할 수 있습니다.

바이올린은 여기에 있습니다 : http://jsfiddle.net/BloodBaz/zGLmy/

자바 스크립트 :

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 

답변

4

자바 스크립트 구문이 이상합니다. 특히 이상한 부분 중 하나는 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.

+0

"자동 삽입 세미콜론"와 동일!? 답변 해주셔서 감사합니다. 필자가 제공 한 사양을 잘 읽고 적절한 답을 표시하십시오. –

관련 문제