2013-08-12 3 views
1

다음은 순환 루프를위한 재귀 함수입니다.동일한 함수, 시간의 다른 동작

<html> 
<body> 
<script type="text/javascript"> 

function repeat(x){ 
document.write(x+" "); 
repeat(x+1); 
} 

repeat(1); 

</script> 
</body> 
</html> 

이 함수를 사용하면 메모리가 부족하기 전에 재귀 호출이 몇 번 발생했는지 확인할 수 있습니다. 처음으로 파이어 폭스에서 실행합니다.

결과 -> 1 2 3 .... 이제 40,536

개까지, 나는 페이지를

결과 새로 고침 -> 1 2 3 ... 46,046

개까지

!! 다시 한 번 다른 브라우저에서 실행하거나 다른 결과를 얻었습니다.

어떻게 가능합니까? 자바 스크립트에서 재귀 호출 스택 논리/제한은 무엇입니까?

답변

2
Internet Explorer 7: 1,789 
Firefox 3: 3,000 
Chrome 1: 21,837 
Opera 9.62: 10,000 
Safari 3.2: 500 

이 제한

의 일부는이 http://javascriptrules.com/2009/06/30/limitation-on-call-stacks/

또한이

http://www.nczonline.net/blog/2009/05/19/javascript-stack-overflow-error/

+0

이것은 매우 유용한 링크였습니다. 고맙습니다. @Backtrack – Nizam

+0

@ Nizam에 오신 것을 환영합니다. 정말 저에게도 도움이되었습니다. – Backtrack

2

JavaScript 사양은 특정 메모리 제한을 요구하지 않습니다. 각 구현은 원하는 메모리 한계를 부과 할 수 있습니다.

+0

내가이 동의은't를 참조하는 모든입니다. IE에서 위의 페이지를 실행할 때 '메모리 부족'이 표시되기 때문입니다. – Nizam

+0

@Nizam IE는 "메모리 부족"을 보여주는 어떤 식 으로든 내 대답을 반증하지 않습니다. JS 스펙은 메모리 제한을 부과하지 않습니다. IE 런타임은 않습니다. 이것은 내 대답과 일치합니다. – cdhowie

+0

나는 .. 브라우저에 따라 다르다. 시간 내 줘서 고마워. – Nizam

관련 문제