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 중국어 웹사이트의 기타 관련 기사를 참조하세요!