> 웹 프론트엔드 > JS 튜토리얼 > 자바스크립트 setTimeout 메소드 - 당신이 알아야 할 모든 것

자바스크립트 setTimeout 메소드 - 당신이 알아야 할 모든 것

Patricia Arquette
풀어 주다: 2024-11-10 17:57:03
원래의
1035명이 탐색했습니다.

Javascript setTimeout method - All you need to know

소개

JavaScript는 개발자가 동적이고 대화형 웹 애플리케이션을 만들 수 있는 강력한 프로그래밍 언어입니다. JavaScript의 중요한 기능 중 하나는 Javascript 대기를 활성화하는 Javascript setTimeout 메소드 함수입니다.

JavaScript 프로그램의 타이밍과 흐름을 제어하려면 setTimeout을 효과적으로 사용하는 방법을 이해하는 것이 중요합니다. 이 종합 가이드에서는 Javascript setTimeout 메소드의 세계를 자세히 살펴보고 다양한 기능을 살펴보겠습니다.

당신이 초보자이든 숙련된 개발자이든 이 글은 JavaScript 프로젝트에서 setTimeout의 잠재력을 최대한 활용하는 데 필요한 모든 지식을 제공할 것입니다.

자바스크립트의 타이밍 기술을 익히고 반응성이 뛰어나고 효율적인 웹 애플리케이션을 만들기 위한 새로운 가능성을 열어보세요.

setTimeout의 세계를 탐험하고 그 비밀을 모두 알아보세요!

전제 조건

setTimeout의 세계를 살펴보기 전에 JavaScript와 기본 개념에 대한 기본적인 이해를 갖추는 것이 좋습니다. 변수, 함수, 기본 제어 흐름(예: if 문 및 루프)에 익숙하면 이 문서에서 설명하는 개념을 더 쉽게 이해할 수 있습니다.

JavaScript를 처음 접하거나 복습이 필요한 경우 기본 사항을 배울 수 있는 다양한 온라인 리소스가 있습니다. MDN Web Docs, W3Schools 및 freeCodeCamp와 같은 웹사이트는 JavaScript 여정을 시작하는 데 도움이 되는 포괄적인 튜토리얼과 가이드를 제공합니다.

또한 JavaScript 초보자를 위한 다음 두 권의 책을 강력히 추천합니다.

Head First JavaScript 프로그래밍: 두뇌 친화적인 가이드

JavaScript: 최종 가이드: 세계에서 가장 많이 사용되는 프로그래밍 언어를 마스터하세요

(그리고 무료로 제공합니다)

이러한 리소스를 활용하면 JavaScript 프로그래밍의 탄탄한 기초를 다지고 setTimeout의 복잡성을 탐색하고 웹 개발 프로젝트에서 새로운 가능성을 여는 데 필요한 지식을 얻을 수 있습니다.

따라서 setTimeout의 복잡한 내용을 자세히 알아보기 전에 JavaScript 프로그래밍에 대한 탄탄한 기초를 갖추고 있는지 확인하세요.

준비가 되면 setTimeout의 기능을 살펴보고 웹 개발 프로젝트에서 새로운 가능성을 열어보세요.

setTimeout의 목적

먼저 setTimeout의 목적을 먼저 이해해 봅시다.

setTimeout은 지연을 도입하거나 이벤트를 예약하거나 특정 시간 간격으로 작업을 수행하려는 시나리오에서 일반적으로 사용됩니다.

좀 헷갈리죠?

예를 들어 이해해 보겠습니다.

참고: 지금은 구문에 대해 생각하지 마세요. 나중에 Syntex에 대해 논의하겠습니다.

함수를 선언하고 싶지만 즉시 호출하는 대신 일정 시간이 지난 후 호출하고 싶다고 가정해 보겠습니다.

여기서 setTimeout이 등장합니다. 기능 실행을 지연시키는 기능을 제공합니다.

다음 코드를 살펴보세요.

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 예에는 단순히 인사말 메시지를 콘솔에 기록하는 greetUser라는 함수가 있습니다. 이 함수의 실행을 1초 정도 지연시키고 싶습니다.

이를 달성하기 위해 setTimeout 함수를 사용하고 greetUser 함수를 첫 번째 인수로, 1000을 두 번째 인수로 전달합니다.

그리고 그게 다입니다!

이 코드를 실행하면 javascript가 1초 동안 대기한 후 "Hello, user!"라는 인사말 메시지가 인쇄됩니다. 콘솔로.

** setTimeout**의 구문 및 매개변수

setTimeout를 효과적으로 사용하려면 구문과 매개변수를 파악하는 것이 중요합니다.

setTimeout의 기본 구문은 다음과 같습니다.

setTimeout(function, delay, param1, param2, ...);
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다양한 구성요소를 분석해 보겠습니다.

첫 번째 매개변수는 지정된 지연 후에 실행하려는 함수 또는 코드 조각입니다. 이름이 지정된 함수일 수도 있고 익명 함수일 수도 있습니다.

두 번째 매개변수 지연은 코드 실행이 시작되기 전의 시간 간격(밀리초)을 나타냅니다. 지정된 기능이 호출되기 전의 지연 기간을 결정합니다.

param1, param2 등과 같은 추가 매개변수는 선택사항입니다. 이를 사용하여 첫 번째 매개변수에 지정된 함수에 인수를 전달할 수 있습니다.

setTimeout 매개변수를 사용하면 함수 실행 시 함수의 동작을 사용자 정의할 수 있습니다.

setTimeout() **은 메소드 호출의 결과로 생성된 타이머를 식별하는 양의 정수인 **timeoutID를 반환합니다. timeoutID는 다른 글에서 다룰 clearTimeout() 메소드에 전달하여 타임아웃을 취소하는 데 사용할 수 있습니다.

참고: 구문이 혼란스럽다면 걱정하지 마세요!

이 블로그의 다음 섹션에서는 각 매개변수에 대한 다양한 예와 사용 사례를 자세히 살펴보겠습니다. 전체 기사를 읽으면 setTimeout

을 효과적으로 사용하는 방법을 명확하게 이해할 수 있을 것이라고 확신합니다.

이 강력한 JavaScript 기능의 잠재력을 최대한 활용하려면 인내심을 갖고 계속 읽어보시기 바랍니다.

setTimeout 코드 분석

우리가 이전에 사용한 코드에 어떤 일이 일어났는지 이미 알고 계시리라 믿습니다. 하지만 이해를 돕기 위해 코드를 함께 분석해 보겠습니다.

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 코드 조각에서:

  1. function 키워드를 사용하여 greetUser라는 함수를 정의합니다. 이 함수는 콘솔에 인사말 메시지를 인쇄하는 역할을 담당합니다.

  2. setTimeout 함수를 사용하여 지정된 지연 후 greetUser 함수 실행을 예약합니다. 지연 시간은 1000밀리초로 설정되어 있으며 이는 1초에 해당합니다.

  3. setTimeout에 전달된 첫 번째 인수는 함수 참조 greetUser입니다. 이는 setTimeout 지정된 지연 후에 실행할 함수를 알려줍니다.

  4. 두 번째 인수 1000은 지연을 밀리초 단위로 나타냅니다. 코드 실행이 시작되기 전의 기간을 결정합니다.

setTimeout을 사용하여 JavaScript에 1초 동안 대기한 후 greetUser 함수를 호출하도록 지시합니다. 그 결과 "안녕하세요, 사용자님!"이라는 인사말 메시지가 나왔습니다. 콘솔에 인쇄됩니다.

익명 함수를 콜백으로 사용

이전 코드 예제에서는 setTimeout 함수의 콜백 함수로 명명된 함수를 사용했습니다.

그러나 setTimeout을 사용하면 지정된 지연 후에 실행될 콜백으로 익명 함수를 제공할 수도 있습니다.

익명 함수는 실행하려는 코드가 간단하고 별도의 함수 이름이 필요하지 않을 때 주로 사용됩니다.

예:

setTimeout(function, delay, param1, param2, ...);
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 경우 익명 함수가 콜백 역할을 합니다. 1000밀리초(또는 1초) 지연 후 콘솔에 메시지를 기록합니다.

console.log 문을 지연 후 실행하려는 코드로 바꿀 수 있습니다. setTimeout에서 익명 함수를 콜백으로 사용하면 유연성이 제공되며 별도의 함수 선언 없이 코드 인라인을 정의하고 실행할 수 있습니다.

콜백 함수에 인수 전달

setTimeout 콜백 함수에서는 매개변수나 인수를 쉽게 전달할 수 있습니다.

매개변수를 받는 함수가 있고 지연 후 함수가 실행될 때 해당 매개변수에 특정 값을 제공하고 싶다고 가정해 보겠습니다.

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 예에서 Greeting 함수는 5초(5000밀리초) 동안 대기하도록 예약되어 있으며 John 인수가 name 매개 변수로 전달됩니다.

특정 사용 사례에 따라 지연 및 인수 값을 조정할 수 있습니다.

이 접근 방식을 사용하면 다양한 값을 인수로 전달하여 콜백 함수의 동작을 맞춤설정할 수 있으므로 보다 동적이고 유연한 코드 실행이 가능해집니다.

다음은 콜백 함수에 인수를 전달하기 위한 몇 가지 추가 팁입니다.

  • 콜백 함수에 인수를 원하는 만큼 전달할 수 있습니다.
  • 인수는 setTimeout에 전달된 순서와 동일한 순서로 콜백 함수에 전달됩니다.
  • 콜백 함수에 가변 개수의 인수를 전달하면 인수 개체를 사용하여 해당 인수에 액세스할 수 있습니다.

아래 예는 다음과 같습니다.

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 예에서 processArgs 함수는 각 인수와 해당 인덱스를 콘솔에 인쇄합니다. 출력은 다음과 같습니다.

setTimeout(function, delay, param1, param2, ...);
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

문자열 리터럴 전달

setTimeout에 함수 대신 문자열을 첫 번째 인수로 전달하면 잠재적인 문제가 발생할 수 있으므로 일반적으로 권장되지 않습니다.

eval()을 사용하는 것과 비슷한 문제가 있습니다.

다음은 문자열 리터럴을 setTimeout에 전달하는 예입니다.

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 경우 "console.log('Hello World!');" 문자열은 제한 시간이 만료되면 전역 컨텍스트에서 코드로 평가됩니다.

그러나 이런 방식으로 문자열을 사용하면 평가가 다른 컨텍스트에서 발생하고 지역 기호나 변수를 사용할 수 없기 때문에 문제가 발생할 수 있습니다.

이러한 문제를 방지하려면 setTimeout의 첫 번째 인수로 함수를 전달하는 것이 좋습니다. 이렇게 하면 코드가 올바른 컨텍스트 내에서 실행되고 로컬 기호에 액세스할 수 있습니다.

함수를 콜백으로 사용하는 대체 접근 방식은 다음과 같습니다.

setTimeout(function () {  
 console.log('This code executes after the delay') 
}, 1000)

로그인 후 복사
로그인 후 복사

이 예에서는 화살표 함수가 콜백으로 사용됩니다. 화살표 기능은 지정된 지연 후에 코드를 실행하는 간결하고 안전한 방법을 제공합니다.

문자열 리터럴을 setTimeout에 전달하는 것과 관련된 함정을 피하고 코드가 올바른 범위 내에서 실행되도록 보장합니다.

문자열 대신 함수를 전달하면 실행 컨텍스트를 더 효율적으로 제어하고 지역 변수나 기호에 액세스할 때 발생할 수 있는 문제를 방지할 수 있습니다.

최대 지연 값

Javascript setTimeout 메소드 함수에서 설정할 수 있는 최대 지연 값은 JavaScript 구현 및 실행 환경에 따라 다릅니다.

대부분의 최신 브라우저 및 JavaScript 환경에서 최대 지연 값은 약 2^31 - 1밀리초이며 이는 대략 *24.85 *일입니다. 이 최대값보다 큰 지연 값을 설정하려고 하면 자동으로 허용되는 최대값으로 고정됩니다.

따라서 이 최대 지연을 초과하는 작업을 예약해야 하는 경우 대체 접근 방식을 고려하거나 여러 setTimeout 호출을 조합하여 사용해야 할 수도 있습니다.

매우 긴 지연 값은 많은 실제 시나리오에서 신뢰할 수 없거나 실용적이지 않을 수 있으므로 주의해서 사용해야 합니다. 정확한 타이밍이나 더 긴 지연이 필요한 경우 해당 목적을 위해 특별히 설계된 다른 기술이나 API를 살펴보는 것이 좋습니다.

최대 지연 값을 초과하는 작업을 예약하기 위한 몇 가지 대체 접근 방식은 다음과 같습니다.

여러 setTimeout 호출을 조합하여 사용하세요. 이는 긴 작업을 개별적으로 예약할 수 있는 작은 단위로 나누는 데 사용할 수 있습니다.

백그라운드 스레드 또는 프로세스를 사용합니다. 이는 메인 스레드나 사용자 인터페이스와 상호 작용할 필요가 없는 작업을 실행하는 데 사용할 수 있습니다.

타사 라이브러리 또는 API를 사용하세요. 지연 시간이 더 긴 작업 예약을 지원하는 다양한 라이브러리와 API가 있습니다.

최대 지연 값을 초과하는 작업을 예약하는 가장 좋은 방법은 작업의 특정 요구 사항에 따라 다릅니다.

문제

setTimeout을 메소드와 함께 사용할 때 메소드 내부의 this 값이 예상과 다른 this 키워드 문제가 발생할 수 있습니다.

이 문제는 setTimeout 작동 방식과 이것이 사용하는 별도의 실행 컨텍스트로 인해 발생합니다.

기본적으로 setTimeout을 사용하여 메소드를 호출하면 메소드 내부의 this 값이 대신 창(또는 전역) 객체로 설정됩니다. 당신이 의도한 물건.

이 동작은 다음 예와 같이 예상치 못한 결과를 초래할 수 있습니다.

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

위의 예에서 myMethodmyArray에서 직접 호출되면 this 값이 myArray로 올바르게 설정됩니다.

그러나 myArray.myMethod와 함께 setTimeout을 사용하는 경우 this 값은 기본적으로 window 객체로 설정됩니다.

이 문제를 극복하기 위해 사용할 수 있는 몇 가지 솔루션이 있습니다.

  • 래퍼 기능 사용:

일반적인 접근 방식은 원하는 this 값을 명시적으로 설정하는 래퍼 함수를 ​​사용하는 것입니다.

setTimeout(function, delay, param1, param2, ...);
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
  • 래퍼 함수로서의 화살표 함수:

화살표 함수는 자신의 this 값을 바인딩하지 않고 대신 주변 범위에서 상속합니다.

이 동작을 활용하여 콜백 함수 내에서 예상되는 this 값을 유지할 수 있습니다.

다음은 setTimeout을 사용하여 화살표 함수를 콜백으로 사용하는 예입니다.

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 경우 화살표 함수에는 자체 this 바인딩이 없으며 대신 myArray의 예상 값인 주변 범위의 this 값을 사용합니다.

화살표 함수를 콜백으로 사용하면 setTimeout 및 메서드

작업 시 이 문제에 대한 간결하고 편리한 솔루션을 제공할 수 있습니다.

화살표 함수는 일반 함수와 동작이 약간 다르기 때문에 그 의미를 고려하고 특정 사용 사례에 따라 가장 적합한 솔루션을 선택하는 것이 중요합니다.

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
  • 바인딩 사용: 또 다른 옵션은 bind() 메서드를 사용하여 원하는 this 값을 메서드에 바인딩하는 것입니다.
setTimeout(function, delay, param1, param2, ...);
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

bind()를 사용하면 지정된 이 값에 영구적으로 바인딩되는 새 함수를 생성하여 setTimeout에 전달되거나 다른 곳에서 호출될 때 일관성을 유지하게 됩니다.

이 솔루션은 메소드와 함께 setTimeout을 사용할 때 이 문제를 해결하는 데 도움이 되므로 원하는 컨텍스트를 유지하고 예상치 못한 동작을 방지할 수 있습니다.

중첩된 시간 초과

중첩된 시간 초과는 다른 setTimeout의 콜백 함수 내에서 setTimeout 함수가 호출되는 상황을 나타냅니다.

이 접근 방식은 시간이 지정된 이벤트 시퀀스를 생성하거나 연속 작업 사이에 지연을 도입하는 데 사용할 수 있습니다.

다음은 중첩된 시간 초과를 설명하는 예입니다.

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 예에서는 세 개의 setTimeout 함수가 서로 중첩되어 있습니다. 각 setTimeout에는 자체 콜백 함수와 지연이 있습니다.

첫 번째 setTimeout은 500밀리초 후에 실행되고, 두 번째는 첫 번째 시간 초과 후 1000밀리초(1초) 후에 실행되며, 세 번째는 두 번째 시간 초과 후 2000밀리초(2초) 후에 실행됩니다.

이 코드를 실행하면 다음이 출력됩니다.

setTimeout(function () {  
 console.log('This code executes after the delay') 
}, 1000)

로그인 후 복사
로그인 후 복사

시간 초과를 중첩하면 다양한 시간 간격으로 발생하는 일련의 작업을 만들 수 있습니다. 이는 일련의 이벤트를 조정하거나 특정 작업 간에 지연을 도입해야 하는 시나리오에 유용할 수 있습니다.

그러나 깊게 중첩된 시간 초과로 인해 발생할 수 있는 잠재적인 복잡성에 유의하는 것이 중요합니다. 중첩된 시간 초과 수가 증가하면 코드를 읽고 유지 관리하기가 더 어려워질 수 있습니다.

이런 경우 비동기 작업을 처리하는 async/await 또는 라이브러리/프레임워크를 사용하는 등의 대체 접근 방식이 더 적절할 수 있습니다.

중첩된 시간 제한을 신중하게 사용하고 코드의 복잡성과 요구 사항에 따라 다른 옵션을 고려하세요.

결론

setTimeout 함수는 개발자가 웹에서 동적이고 대화형 경험을 만들 수 있도록 지원하는 JavaScript의 기본 도구입니다.

setTimeout을 마스터하면 타이밍을 제어하고, 작업을 예약하고, 정교한 애플리케이션을 구축하는 능력을 얻을 수 있습니다. 이 블로그에서 공유된 통찰력과 예시를 통해 이제 setTimeout을 효과적으로 활용하고 JavaScript 타이머 기능의 잠재력을 최대한 활용할 수 있는 준비가 되었습니다.

이제 타이밍 관련 작업을 처리하고, 지연을 관리하고, 보다 대화형이고 동적인 웹 애플리케이션을 만들 수 있는 강력한 도구를 갖게 되었습니다.

setTimeout을 연습하고 실험하여 더 깊이 이해하고 잠재력을 최대한 활용하세요. 이러한 지식을 바탕으로 setTimeout의 기능을 활용하고 JavaScript 애플리케이션의 기능을 향상시킬 수 있는 준비를 갖추게 됩니다.

행복한 코딩하세요 :)

의지

  • https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout

  • https://www.javascripttutorial.net/javascript-bom/javascript-settimeout/

위 내용은 자바스크립트 setTimeout 메소드 - 당신이 알아야 할 모든 것의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿