책 있음 You Don't Know JS: Scope & Closures이 코드 샘플은 완전히 이해할 수 없습니다.조건부 함수 선언
는는 "일반적으로 오히려이 코드에서 알 수 있듯이 조건부 것보다, 클로징 범위에 게양 정상 블록 안에 표시 기능 선언은"
foo(); // "b"
var a = true;
if (a) {
function foo() { console.log("a"); }
}
else {
function foo() { console.log("b"); }
}
그것은 무엇을 의미 하는가? 그것은 어떻게 가능한가? 조건부가 작동하지 않습니까?
인용문이 잘못되었습니다. – RobG
* "무엇을 의미합니까?"* 함수 선언은 다른 모든 곳과 마찬가지로 호이스트됨을 의미합니다. * "조건부가 작동하지 않습니까?"* 작동하지만 코드가 실행되기 전에 호이스트가 발생합니다. 실제로 블록 내에서 함수 * 선언 *이 실제로 유효하지 않기 때문에 실제로는 더 복잡합니다. 그러나 브라우저는이를 허용하고 다른 동작을 구현합니다. [다른 브라우저에서 함수 선언이 다르게 처리되는 이유는 무엇입니까?] (http://stackoverflow.com/q/8871974/218196) –
'var a = true; const foo = a?() => console.log ('a') :() => console.log ('b'); foo();'그런 다음 콘솔은'foo '가 게양되지 않기 때문에'a '를 로깅합니다. – Josep