반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 버전관리
- 보안
- 2
- 알고리즘
- I'm Sorry
- 컴퓨터공학
- 빅데이터
- 소프트웨어
- 자료구조
- 프로그래밍
- 데이터분석
- 딥러닝
- 데이터구조
- 데이터베이스
- 소프트웨어공학
- 파이썬
- 데이터과학
- 사이버보안
- 컴퓨터과학
- 머신러닝
- 네트워크
- 프로그래밍언어
- 네트워크보안
- Yes
- 웹개발
- 인공지능
- 컴퓨터비전
- 자바스크립트
- 클라우드컴퓨팅
- 코딩
Archives
- Today
- Total
스택큐힙리스트
바닐라 자바스크립트에서 jQuery의 $.ready()와 동일한 기능 - 페이지/DOM이 준비되어 함수를 호출하는 방법 [중복] 본문
카테고리 없음
바닐라 자바스크립트에서 jQuery의 $.ready()와 동일한 기능 - 페이지/DOM이 준비되어 함수를 호출하는 방법 [중복]
스택큐힙리스트 2024. 1. 28. 19:09반응형
jQuery를 사용하여 우리는 아주 멋진 .ready()
함수를 알고 있습니다:
$('document').ready(function(){});
하지만, 만약에 라이브러리를 사용하지 않고 표준 JavaScript로 작성된 함수를 실행하고, 페이지가 준비된 후에 함수를 실행하고 싶다면 어떻게 접근해야 할까요?
다음과 같이 할 수 있다는 것을 알고 있습니다:
window.onload=myFunction();
또는 body
태그를 사용할 수 있습니다:
<body onload=myFunction()>
또는 페이지의 맨 아래에 모든 것 이후의 body
태그나 html
태그 뒤에 다음과 같이 시도할 수도 있습니다:
<script type=text/javascript>
myFunction();
</script>
jQuery의 $.ready()
와 유사한 방식으로 한 개 이상의 함수를 발행하기 위한 크로스 브라우저(old/new) 호환 메서드는 무엇일까요?
답변 1
- IIFE(즉시 호출되는 함수 표현식)를 만들어 비공개 상태 변수를 갖게합니다.
docReady(fn, context)
라는 공개 함수를 선언합니다.docReady(fn, context)
가 호출될 때, 준비 완료 핸들러가 이미 실행되었는지 확인합니다. 이미 실행되었다면, 이 JS 스레드가setTimeout(fn, 1)
으로 종료된 직후 새로 추가 된 콜백이 실행되도록 스케줄합니다.- 준비 완료 핸들러가 아직 실행되지 않았다면, 이 새로운 콜백을 나중에 호출할 콜백 목록에 추가합니다.
- 문서가 이미 준비되었는지 확인합니다. 이미 준비되었다면, 모든 준비 완료 핸들러를 실행합니다.
- 문서가 준비 될 때까지 이벤트 리스너를 설치하지 않았다면, 이제 설치합니다.
document.addEventListener
가 있는 경우,.addEventListener()
를 사용하여DOMContentLoaded
및load
이벤트에 대한 이벤트 핸들러를 설치합니다. load는 안전을 위한 백업 이벤트이므로 필요하지 않아야 합니다.document.addEventListener
가 없는 경우,.attachEvent()
를 사용하여onreadystatechange
및onload
이벤트에 대한 이벤트 핸들러를 설치합니다.onreadystatechange
이벤트에서document.readyState === complete
를 확인하고, 그렇다면 모든 준비 완료 핸들러를 실행하는 함수를 호출합니다.- 다른 이벤트 핸들러에서는 모든 준비 완료 핸들러를 실행하는 함수를 호출합니다.
- 모든 준비 완료 핸들러를 호출하는 함수에서 상태 변수를 확인하여 이미 호출되었는지 확인합니다. 이미 호출되었다면, 아무 작업도 수행하지 않습니다. 아직 호출되지 않았다면, 준비된 함수 배열을 순환하고 등록된 순서대로 각각 호출합니다. 이들이 한 번 이상 실행되지 않도록 이들이 모두 호출된 것을 나타내는 플래그를 설정합니다.
- 함수 배열을 지워서 사용중인 클로저를 해제할 수 있도록 합니다.
docReady()
으로 등록된 핸들러는 등록된 순서대로 실행될 것이 보장됩니다.
문서가 이미 준비된 후에 docReady(fn)
을 호출하면, 콜백은 현재 실행 스레드가 완료될 때까지 setTimeout(fn, 1)
을 사용하여 실행 예정으로 예약됩니다. 이를 통해 호출 코드는 항상 나중에 호출되는 비동기 콜백이라고 가정할 수 있으며, 현재 JS 스레드가 완료된 후로써 호출 순서를 유지합니다.
답변 2
Vanilla JavaScript의 $.ready() 함수와 같은 기능 - 페이지/DOM이 준비될 때 함수를 호출하는 방법 [중복] 이 주제에 대한 SEO 향상을 고려한 한국어 에세이를 작성해 주세요.페이지의 DOM(Document Object Model) 요소가 완전히 로드되기 전에 JavaScript 코드를 실행할 경우, 코드가 제대로 작동하지 않을 수 있습니다. 이러한 문제를 해결하기 위해 jQuery에서는 $.ready() 함수를 제공합니다. 그러나, 일반적으로 jQuery를 사용하지 않고 순수한 JavaScript로 작업하는 경우에는, 이와 같은 기능을 수행할 수 있는 다른 방법을 찾아야 합니다.
JavaScript에서 페이지를 로드할 때 이벤트를 감지하고 처리하는 방법이 있습니다. 이를테면, DOMContentLoaded라는 이벤트를 사용할 수 있습니다. 이 이벤트는 페이지의 DOM 트리가 구성되어 JavaScript 코드가 실행될 수 있을 때 발생합니다.
그렇다면, 페이지가 준비되었을 때 함수를 호출하는 방법은 무엇일까요? 한 가지 방법은 addEventListener() 함수를 사용하는 것입니다. 다음과 같이 코드를 작성할 수 있습니다:
document.addEventListener(DOMContentLoaded, function() {
// 페이지가 준비되었을 때 실행할 함수
});
이렇게 JavaScript에서 페이지 준비 이벤트를 감지하고, 해당 이벤트가 발생했을 때 함수를 호출할 수 있습니다. 이 방법을 사용하면, 순수 JavaScript로 페이지/DOM이 준비될 때 함수를 호출하는 기능을 달성할 수 있습니다.
이에 따라, 페이지/DOM이 준비되었을 때 함수를 호출하는 방법에 대한 Vanilla JavaScript의 $.ready() 함수와 같은 기능에 대해 설명했습니다. 이를테면, DOMContentLoaded 이벤트를 사용하여 페이지가 준비되었을 때 함수를 호출할 수 있습니다. 이를테면, addEventListener() 함수를 사용하여 이벤트를 감지하고, 해당 이벤트가 발생했을 때 함수를 실행할 수 있습니다.
위의 방법을 사용하면 jQuery를 사용하지 않고도 순수 JavaScript로 페이지를 로드할 때 함수를 호출할 수 있으며, 페이지의 검색 엔진 최적화(SEO) 향상에도 도움이 됩니다.
반응형
Comments