2010-07-20 2 views
1

은 DOM이 준비가되면 jQuery의이

$(function() { ... }) 

실행되는 기능을 추가하기 위해 사용하는 2 또는 3 또는 20 문이있는 경우, 모든 기능을 병렬로 실행하거나 순차적으로 실행됩니다?

답변

5

document.ready 동작합니다을보고 불을 지르고에서 중단 점을 넣을 수 있습니다, 그들은 바인딩 된 순서의 순서와 에 발생합니다. 당신은 the relevant jQuery core source here을 볼 수

이것은 당신이 $(function) 할 때 발생하는 것입니다 :

ready: function(fn) { 
    jQuery.bindReady(); 
    if (jQuery.isReady) { 
     fn.call(document, jQuery); 
    } else if (readyList) { 
     readyList.push(fn); 
    } 
    return this; 
} 

을 그리고이 나중에 발생, 때 "준비"이벤트가 발생합니다 :

if (readyList) { 
    var fn, i = 0; 
    while ((fn = readyList[ i++ ])) { 
     fn.call(document, jQuery); 
    } 
    readyList = null; 
} 

만약 문서의 이미 준비가되면 함수가 즉시 실행됩니다. 위의 첫 번째 코드 블록에있는 부분은 if입니다.

+0

문서가 준비되면 더 이상 큐의 끝에 추가 할 수없는 것처럼 보입니다. 새로운 모든 준비된 핸들러는 즉시 실행됩니다. 즉, post-ready 바인드가 바로 실행되기 때문에 바인드 순서가 아닙니다. –

+1

@Sean - 여전히 주문 상태 임 :) –

3

순차적으로 실행됩니다. 이 동작이 점에서 일반 이벤트와 같은

+0

중단 점을 사용하는 것이 결정적인 테스트라고 생각하지 않습니다. 예를 들어 Java를 사용하여 Eclipse에서 여러 스레드에 대한 중단 점을 넣을 수 있으며 디버거는 각 중단 점에서 중지됩니다. 구별되는 요소는 현재 실행중인 스레드가 나열되어 있다는 것입니다. 그렇지 않은 경우 코드가 스레드 방식으로 실행되는 경우 쉽게 알 수 없습니다. 위의 코드를 기반으로 – Anurag

3

순서대로 실행됩니다. Javascript 코드가 병렬로 실행되지 않습니다.

+0

이 경우 사실이지만 담요 성명서로는 전적으로 사실이 아닙니다. [bobince] (http://stackoverflow.com/users/18936/bobince)) 여기에 예외에 대한 위대한 글을 했어 : http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded –

+1

@ 닉 : 실행 사건이 더 많은 것처럼 보입니다. 실제로 병렬로 실행되는 것보다 – Guffa

+0

자바 스크립트 코드가 병렬로 실행되지 않습니까? 'setInterval()'이 0.1 초마다 하나 있고, 또 다른 것이 0.11 초일 때, 어떤 시점에서 2 개의 함수가 병렬로 실행되지 않을까요? (2 스레드처럼) –