프라임 분해와 관련된 일부 함수를 작성했는데 함수 단락과 같은 결과를 테스트 할 때 테스트 단락을 확인할 때 document.getElementById("text")
으로 잘 작동하는 것으로 나타났습니다. 그러나 전역 변수 text
을 var text = document.getElementById("text")
으로 선언 한 다음 더 긴 버전을 text
으로 대체하면 더 이상 작동하지 않습니다. 그러나 나는 로컬에서 text
을 선언했을 때 작동한다는 것을 알았습니다. 왜 그런가요? 어떻게 고칠 수 있습니까? 내 JSFiddle은 여기에 있습니다 : https://jsfiddle.net/MCBlastoise/3ehcz214/변수가 로컬에서만 작동합니다
을 그리고 이것은 내 코드입니다 :
var text = document.getElementById("text");
function isPrime(num) {
var lastDigit = parseInt((num + "").split("").reverse()[0]);
if (typeof num !== "number" || num <= 1 || num % 1 !== 0) {
\t return undefined;
}
\t else if (num === 2) {
\t return true;
}
else if (lastDigit === 0 || lastDigit === 2 || lastDigit === 4 || lastDigit === 5 || lastDigit === 6 || lastDigit === 8) {
\t return false;
}
else {
for (var i = 2; i < num; i++) {
\t if (num % i === 0) {
return false;
}
}
return true;
}
}
function factorSplit(dig) {
if (typeof dig !== "number" || dig <= 1 || dig % 1 !== 0) {
return undefined;
}
else if (dig === 2) {
\t return undefined;
}
else {
\t var factor;
\t for (var i = 2; i < dig; i++) {
\t \t if (dig % i === 0) {
\t \t \t factor = i;
\t \t \t \t break;
\t \t }
\t }
\t if (factor === undefined) {
\t return undefined;
\t }
\t \t else {
\t \t return [factor, (dig/factor)];
\t \t }
}
}
function allPrimes(arr) {
\t if (Array.isArray(arr) === false || arr.length < 1) {
\t \t return undefined;
\t }
\t else {
for (var i = 0; i < arr.length; i++) {
\t \t if (isPrime(arr[i]) !== true) {
\t \t \t return false;
\t }
\t }
\t \t return true;
\t }
}
function primeFactors(int) {
\t if (typeof int !== "number" || int <= 1) {
\t return undefined;
}
else if (isPrime(int) === true) {
\t return false;
}
else {
\t var initFactors = factorSplit(int);
\t while (allPrimes(initFactors) !== true) {
\t \t initFactors = initFactors.concat(factorSplit(initFactors[initFactors.length - 1]));
\t initFactors.splice((initFactors.length - 3), 1);
\t }
\t return initFactors;
}
}
function listPrimes() {
\t repeat = setInterval(findPrime, 1);
}
var primeInts = [2];
var check;
function findPrime() {
var i = primeInts[primeInts.length - 1] + 1;
\t if (check === undefined) {
\t \t check = true;
\t \t text.innerHTML = primeInts[0];
\t }
\t else {
\t \t while (isPrime(i) !== true) {
\t \t \t i++;
\t \t }
\t \t primeInts.push(i);
\t \t text.innerHTML += ", " + primeInts[primeInts.length - 1];
\t }
}
//text.innerHTML = isPrime(6);
<div onclick="listPrimes()" style="cursor:pointer; background-color:black; width:30px; height:30px"></div>
<p id="text"></p>
문제가 무엇인지 확실하지 않습니다. 당신은 전역'텍스트'를 사용하고 싶습니까? –
그 혼란스러운 부분은 아무것도 변경하지 않습니다. 코드에는 아무런 문제가없는 것처럼 보이지만 주석을 달아도 기능이 동일합니다. –
@JonathanPortorreal 한 번 요소 (ID 텍스트가있는 단락)를 전역 적으로 정의한 다음 모든 기능에서 사용할 수있게하려고합니다. 그러나 필자는 모든 기능에서 요소를 다시 로컬로 정의해야했습니다. 이것은'findPrime()'에서 주석 밑의 행을 주석 처리하여 관찰 할 수 있습니다. 요소를 로컬에서 재정의하는 것이 왜 필요한지 알 수 없습니다. – MCBlastoise