>  기사  >  웹 프론트엔드  >  함수 표현식과 함께 'setTimeout'을 사용할 때 JavaScript 코드가 실패하는 이유는 무엇입니까?

함수 표현식과 함께 'setTimeout'을 사용할 때 JavaScript 코드가 실패하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-24 18:50:41890검색

Why Does My JavaScript Code Fail When Using `setTimeout` With Function Expressions?

JavaScript 함수 선언 및 평가 순서

첫 번째 예제가 실패하는 이유는 무엇입니까?

JavaScript에서 코드 실행은 컴파일과 평가라는 두 단계로 구성됩니다. 첫 번째 예는 이러한 단계와 관련된 함수 선언과 표현식 간의 근본적인 오해로 인해 실패합니다.

함수 선언과 표현식

함수 선언은 function 키워드를 사용하고 다음을 따릅니다. 구문:

function name (arguments) {code}

함수 표현식은 표현식 컨텍스트에서 작성되며 괄호로 묶인다는 점을 제외하면 선언과 동일한 구문을 따릅니다. 표현식은 컴파일이 아닌 실행 중에 처리됩니다.

사례 분석

예 1:

(function() {
setTimeout(someFunction1, 10);
var someFunction1 = function() { alert('here1'); };
})();

컴파일: SomeFunction1 정의되지 않은 것으로 정의됩니다.

실행: setTimeout은 someFunction1의 정의되지 않은 값으로 호출됩니다.

예 2:

(function() {
setTimeout(someFunction2, 10);
function someFunction2() { alert('here2'); }
})();

컴파일: SomeFunction2가 함수로 선언되었습니다..

실행: 컴파일된 someFunction2 함수로 setTimeout이 호출됩니다.

예 3:

(function() {
setTimeout(function() { someFunction3(); }, 10);
var someFunction3 = function() { alert('here3'); };
})();

컴파일: SomeFunction3은 처음에 정의되지 않은 것으로 정의됩니다.

실행: 익명 함수가 전달됩니다. setTimeout에 someFunction3에 대한 클로저를 생성합니다. 나중에 someFunction3에는 정의되지 않은 값을 재정의하는 함수가 할당됩니다.

예제 4:

(function() {
setTimeout(function() { someFunction4(); }, 10);
function someFunction4() { alert('here4'); }
})();

예제 2와 유사하게 someFunction4는 전달되기 전에 선언됩니다. setTimeout.

요약

someFunction1이 컴파일 중에 setTimeout에 전달되기 전에 선언되지 않았기 때문에 첫 번째 예제는 실패합니다. 함수 표현식은 선언이 처리된 후 실행 중에 평가되어야 합니다. 따라서 함수 표현식을 사용할 때, 특히 setTimeout과 같은 비동기 함수에 전달될 때 표현식의 순서가 중요합니다.

위 내용은 함수 표현식과 함께 'setTimeout'을 사용할 때 JavaScript 코드가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.