if/else 문 내 함수 선언
if/else 문 내에서 함수 선언이 발견되면 해당 처리는 JavaScript에 따라 달라질 수 있습니다. 환경. 제공된 코드 조각에서 함수 선언은 각 if/else 분기 내부에 정의됩니다.
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); // Expected output: foo
ECMAScript 5(ES5)의 비엄격 모드에서 위 코드는 예측할 수 없는 동작을 나타냅니다. 브라우저와 엔진마다 블록 내 함수 선언을 다르게 처리합니다.
그러나 ECMAScript 2015(ES2015) 이상에서는 블록 내 함수 선언이 허용됩니다. 이러한 블록 내의 함수 선언은 해당 블록으로 범위가 지정됩니다. 코드 조각에서 함수 a는 가장 안쪽 if 블록 내에서 선언됩니다. 결과적으로 전역 범위에서 정의되지 않아 정의되지 않은 함수 오류가 발생합니다.
if ('foo' === 'bar') { function a() { abc = 'foo'; } } a(); // Error: a is not defined
조건부 함수 정의의 경우 선언 대신 함수 표현식을 사용하는 것이 좋습니다.
var a = 'foo' === 'bar' ? function() { abc = 'foo'; } : function() { abc = 19; }; a(); document.write(abc); // Expected output: 19
위 내용은 함수 선언은 JavaScript의 if/else 문 내에서 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!