해결된 질문
작성
·
186
1
좋은 강의 해주셔서 감사드립니다.
계속 코드를 짜보았지만, 열어보면 무한 로딩만 걸리다가 디버그툴에 의해 중지되기만 하고, 결국 돌아가지를 않아서요 :(
몇 번을 살펴보아도 아직 부족한 탓에 문제점을 찾질 못했습니다.
코드 리뷰 한번 부탁드립니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
</head>
<body>
<script>
var numbers = {};
numbers.Prime = [];
numbers.All = [];
numbers.isprime = function(number) {
for(i = 2; i < number; i++) {
if(number % i === 0) {
return false;
}
}
return true;
};
numbers.AllNumber = function(maxnum) {
for(i = 2; i <= maxnum; i++) {
this.All.push(i);
}
};
numbers.splitprime = function() {
for(i = 0; i <= this.All.length; i++) {
var a = this.All[i];
if (this.isprime(a)) {
this.Prime.push(a);
}
}
};
numbers.printprime = function() {
document.write("전체 소수의 개수: " + this.Prime.length + "<br>" + "<br>");
for(var i = 0; i < this.Prime.length; i++) {
document.write((i+1) + "번째 소수: " + this.Prime[i] + "<br>");
}
};
numbers.AllNumber(10);
numbers.splitprime();
numbers.printprime();
</script>
</body>
</html>
답변 3
2
안녕하세요. 지나가던 수강생인데 혹시나 도움이 될까 싶어 답변 남깁니다.
무한 로딩만 걸리다가 디버그툴에 의해 중지되는 문제 -> for문에 i = 0 -> var i =0 으로 바꿔주시면 해결됩니다.
추가로 splitprime 함수에서 배열은 1번이아닌 0번부터 시작하기때문에 i <= this.All.length 를 i < this.All.length 로 바꿔주셔야합니다.
1
참 그리고 이렇게 디버깅이 어려울 때는 console.log(변수명)을 이용해서 중간중간에 값을 찍어보는 방법과 브레이크포인트라는 것을 활용하는 방법도 있으니 검색해 보세요.
1
위에 Red님이 답변 주셨네요.
이 문제 때문에 요즘은 var 대신에 let이나 const를 사용합니다.
전체 소스를 약간 고쳤습니다. 아래 참고하세요.
https://codepen.io/honux77/pen/BgdOeJ?editors=1000
https://gist.github.com/honux77/7032ad6c9a2c086141cc5d207c4be452