2013-04-30 2 views
0
내가 가지고

와 무한 호출 스택을 얻기 :이 자바 스크립트

var c = { 
    typeStart: function(msg, loc) { 
     loc.append("<p>"); 
     this.typeLetter(msg, loc, 0); 
    }, 

    typeLetter: function(msg, loc, pos) { 
     loc.append(msg.charAt(pos)); 
     pos = pos + 1; 
     if (pos == msg.length) { this.typeEnd(loc); } 
     setTimeout(this.typeLetter(msg, loc, pos), 100); 
    }, 

    typeEnd: function(loc) { 
     loc.append("</p>"); 
    } 
} 

c.typeStart("hello", $("#somediv")); 

어떤 이유로, 나는 분명히 typeLetter이 무한대로 호출되고, 뭔가가있어. 나는 자바 스크립트의 비동기 성질과 관련 있다고 가정한다. 이 함수가 호출됩니다

typeLetter: function(msg, loc, pos) { 
    loc.append(msg.charAt(pos)); 
    pos = pos + 1; 
    if (pos == msg.length) { this.typeEnd(loc); } 
    setTimeout(this.typeLetter(msg, loc, pos), 100); 
},    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

및이 setTimeout에 전달 될 결과 :

답변

4

는 여기에 귀하의 문제입니다. 익명 함수로 포장해야합니다.

setTimeout(function() { 
    this.typeLetter(msg, loc, pos); 
}, 100); 
+0

아, 네 말이 맞습니다. 나는 할 수있을 때 받아 들일 것이다. – n0pe