javascript - Elevation의 함수 선언 예와 혼동됨
淡淡烟草味
淡淡烟草味 2017-06-26 10:50:47
0
2
661

"JavaScript 고급 프로그래밍" 7장 함수, 함수 선언의 승격과 관련하여 다음과 같은 예가 있습니다.

으아아아

책의 원문은 다음과 같습니다.

표면적으로 위 코드는 조건이 true일 때 sayHi()의 한 정의를 사용하고, 그렇지 않으면 다른 정의를 사용한다는 의미입니다. 실제로 이는 ECMAScript의 잘못된 구문이며 JavaScript 엔진은 오류를 수정하고 합리적인 상태로 변환하려고 시도합니다. 그러나 문제는 브라우저가 오류를 수정하려는 시도에 일관성이 없다는 것입니다. 대부분의 브라우저는 조건을 무시하고 두 번째 문을 반환합니다. Firefox는 조건이 true인 경우 첫 번째 문을 반환합니다. 따라서 이 사용법은 위험하므로 코드에서 사용해서는 안 됩니다.

하지만 크롬과 js bin에서 테스트를 해보고 조건을 true로 변경했더니 "안녕하세요"라는 알림이 뜹니다. 책에서 언급한 "대부분의 브라우저는 두 번째 문을 반환하고 조건을 무시합니다"와 같은 문제는 없습니다. :

으아아아

조언 부탁드립니다. 감사합니다!

淡淡烟草味
淡淡烟草味

모든 응답(2)
为情所困

true는 변수가 아닌 리터럴입니다. 브라우저는 구문 분석 시 다음과 유사하게 if 문을 직접 최적화합니다. 으아악

그러나 저자는 다른 상황을 언급하고 있습니다

으아악

三叔

컴파일러는 이 코드를 얻은 후 동일한 범위에 두 개의 중복된 함수 선언이 있음을 발견합니다. 첫 번째 선언은 두 번째 선언으로 직접 대체됩니다.
js는 블록 내부에 함수를 선언하는 것을 권장하지 않습니다.
엄격 모드에서 이 코드는 오류를 직접 보고합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿