이전에는 함수와 변수의 이름이 같으면 함수 선언 승격이 변수 선언 승격보다 우선할 것이라고 생각하고 다음 코드를 테스트했습니다
으아악누가 누구를 덮어쓰는지에 따라 console.log(f)의 출력이 달라집니다. 아니면 다른 이유가 있나요?
마스터에게 설명해 달라고 부탁하세요
黄舟2017-06-12 09:30:15
첫번째 문단
으아악=>
과 동일 으아악두 번째 문단
으아악=>
과 동일 으아악보기
https://www.zhihu.com/questio...
某草草2017-06-12 09:30:15
블록에 없는 함수를 정의하는 경우 먼저 함수를 호이스트한 다음 변수 선언을 참조하세요. ECMAScript 5, 섹션 10.5.
예는 다음과 같습니다.
으아악위 출력은 정의되지 않은 함수입니다. 따라서 먼저 함수를 승격한 다음 변수 선언을 승격하세요.
PHP中文网2017-06-12 09:30:15
JS 인터프리터는 먼저 var
문을 승격합니다. 대입문 대신 var 선언문을 승격합니다. 그러면 함수 선언이 승격됩니다. 따라서 위와 같은 상황이 발생하게 됩니다
두 번째 경우는 호이스팅과 관련이 없는 것 같습니다. 그것도 개선되었지만 var f
,但这里关键在于执行赋值 f = 2
출력되었습니다. . 따라서 JS가 약한 유형의 언어임을 증명하는 것은 좋은 선택입니다 = =
제가 말한 내용이 모호할 수도 있겠네요, LZ님, 다른 분들의 설명을 들어보시는 게 나을 것 같아요
为情所困2017-06-12 09:30:15
첫 번째 코드 조각은 변수 승격(var f=undefine)이고 변수 f는 함수를 가리킵니다. 두 번째 코드 조각은 JavaScript의 실행 순서에 따라 f에 2를 할당합니다.
漂亮男人2017-06-12 09:30:15
js가 실행되면 위에서 아래로 실행됩니다.
으아악이 코드에서는 함수 선언 function f와 변수 선언 var f가 함께 승격되지만 함수 선언 우선순위가 더 높아지므로
코드는
f=2 (할당에 속하며, 위치는 그대로 유지되나 변수 선언이 개선됨)
두 번째 코드
으아악위의 방법을 사용하여
를 이해하면 js 엔진에서는
함수 f는 변수 f로 덮어쓰기되므로 출력은 2
입니다.黄舟2017-06-12 09:30:15
으아악
ycloud가 말했듯이 위의 이유는 "함수 정의 승격은 if의 블록 범위로만 승격됩니다"
으아악함수 정의가 if 블록 범위로만 승격된다면 위와 같은 이유는 무엇인가요? (Chrome58 테스트) if 블록 범위의 함수에 외부에서 접근할 수 있는 이유는 무엇인가요?