2015-01-29 4 views
1

다른 이유가 있습니까? 너무 길면? 브라우저의 작동을 멈추게 할 것인가? 너무 길면 얼마나 오래 걸릴 까?while 루프는 무한대로 충돌해야합니까?

setTimout 0 루프로 긴 루핑 크래킹 문제를 해결할 수 있으므로 다음 틱마다 코드가 실행되므로이 ​​경우 무한히 반복되어 충돌 할 수 있습니까?

나는이 어리석은 소리로 들리는 것을 코딩하지 않고있다. 나는 항상 궁금해했다.

나는 그것이 각 브라우저마다 다르다고 생각했을 것이다. 그래서 질문을 위해서 합리적으로 잘 알려져 있고 사용 된 브라우저 - 크롬이라고 말할 수있다.

편집 : 가비지 컬렉터와 파괴되지 않는 개체에 대해 언급했는데, 누군가이 예제를 가지고 있습니까? 이 같은 루프가있는 경우

+0

가 관련 : 무거운 작업을하는 동안 [어떻게 브라우저를 막지 않도록하는? ] (http://stackoverflow.com/q/10180391/710446) 또한 "너무 길다"와 "무한한"에 대해서, 프로그램이 어떻게 우주의 열사병 이후 언젠가 종료되는 루프와 [루프 그 끝내지 않을거야] (https://en.wikipedia.org/wiki/Halting_problem)? 루프가 메모리를 소비하지 않는 한 항상 스크립트를 계속 실행할 수 있지만 모든 최신 브라우저는 결국 사용자에게 스크립트를 일찍 종료 할 수있는 옵션을 제공합니다. – apsillers

답변

1

시간을 멀티 태스킹하고있다,하지만 당신은 루프 내에서 할 오히려 것. 예를 들어, 가비지 컬렉터에 의해 파괴되지 않는 루프 내에서 많은 객체를 생성하면 결국 메모리가 부족 해지고 스크립트가 중단됩니다.

예 :

var a = []; 
for (i = 0; i < Number.MAX_SAFE_INTEGER; i++) { 
    a.push(a); 
} 

(좋아, 그것은 루프에 대한,하지만 동안 그냥 같은 일을 다시 할 수 있습니다)

+0

이 안전한 루프 또는 가비지 수집이없는 루프의 예입니까? – 8DK

+0

'a' 객체가 엄청나게 커질 것이기 때문에 잠시 후에 충돌 할 것입니다. – Mchl

+0

가비지 컬렉터에 의해 파괴되지 않는 루프 내에 많은 객체의 예를 보여줄 수 있습니까? – 8DK

0

는 :

while(true) 
{ 
    i = 1; 
} 

아무것도 일어나지 않을 것 만 CPU가 뜨거워집니다 어떤 시간에 묻습니다 브라우저는 스크립트를 중지 : D

당신이있는 경우 재사용 루프 또는 일부 출력이있는 루프, 그렇다면 RAM은 invinit이 아닙니다.

setTimout을 사용하면 병력을 절약 할 수 있고 웹 사이트를 차단하지 않으므로 브라우저가 일부 출력과 함께 RAM을 사용하는 경우 RAM을 채울 수 있습니다.

시간 제한 협력 자체가 제한되지 않습니다

관련 문제