조건문 내 함수 선언: 사례 연구
이 질문은 if/else 문 내에 중첩된 함수 선언의 동작에 관한 것입니다. 전통적으로 JavaScript에서는 함수 선언이 코드에서의 물리적 위치에 관계없이 끌어올려지고 전역 범위를 가졌습니다. ES5 엄격 모드에서는 함수 선언이 최상위 범위나 함수 내로 제한되었습니다. 엄격하지 않은 모드에는 예측할 수 없는 동작이 있어 브라우저 간에 불일치가 발생했습니다.
제공된 예에서:
<code class="js">var abc = ''; if (1 === 0) { function a() { abc = 7; } } else if ('a' === 'a') { function a() { abc = 19; } } else if ('foo' === 'bar') { function a() { abc = 'foo'; } } a(); document.write(abc); //writes "foo" even though 'foo' !== 'bar'</code>
최신 JavaScript(ES2015 이상)에서는 이제 블록 내의 함수 선언이 허용됩니다. . 그러나 범위는 선언된 블록으로 지정됩니다. 즉, 위의 예에서
조건부로 함수를 정의하는 경우 함수 선언 대신 함수 표현식을 사용하는 것이 좋습니다. 이렇게 하면 함수의 범위가 명시적으로 정의되고 예측 가능해집니다.
위 내용은 조건문 내의 함수 선언으로 인해 JavaScript에서 예기치 않은 동작이 발생할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!