함수 향상 꿀 행동
2828 단어 자바 script
그러나 함수 성명 의 방법 으로 function 을 정의 하고 ES6 가 아 닌 {} 을 만 났 을 때 꿀 행동 이 있 습 니 다.
한 문제 로 인 한 참사.
if (true) {
a = 1
function a() {}
// a = 1
console.log(a)
}
console.log(a)
if (true) {
// a = 1
function a() {}
a = 1
console.log(a)
}
console.log(a)
이상 적 인 상태 에서:
if(){}
에 존재 하지 않 습 니 다 let
, const
.블록 급 작용 역 은 발생 하지 않 을 것 입 니 다.다시 함수 에 따라 향상 시 키 면 상기 두 가 지 는 function a() {}
a = 1
console.log(a)
console.log(a)
즉 출력
Block
, 1
실제 상황 은 전자 1
, 1
후자 1
, 1
디 버 깅 분석f a(){}
디 버 깅 분석 문 제 는 먼저 문 제 를 간소화 한다. debugger
console.log(a)
if (true) {
debugger
function a() {}
debugger
}
console.log(a)
출력
debugger
, undefined
첫 번 째 f a(){}
, js 가 실행 되 기 시 작 했 을 때 전체 적 으로 a 를 밝 혔 으 나 정의 되 지 않 았 습 니 다.두 번 째
debugger
, debugger
의 함수 가 전체 국면 이 아 닌 블록 급 역할 영역 a
으로 향상 되 었 습 니 다.세 번 째
Block
에서 야 debugger
내의 Block
값 을 전역 a
에 부여 합 니 다.왜 전체적인 성명 보 다 는 할당 이 라 고 강조 하 는 것 일 까?지금
a
을 보충 하여 과정 을 다시 한 번 보면 설명 할 수 있다. debugger
console.log(a)
if (true) {
debugger
a = 1
debugger
function a() {}
debugger
}
console.log(a)
세 번 째
a=1
시 debuger
는 1
리 Block
를 덮는다.네 번 째
f a(){}
때 debuger
의 정 의 를 실 행 했 을 때 전체 function
가 a
로 바 뀌 었 음 을 발견 할 수 있다.마지막 으로 이 단계 가 실 행 된 전후 에 함수 성명 문 구 를 실행 할 때 js 는 블록 급 의 함수 명 속성 값 을 전체 함수 명 속성, 즉
1
에 부여 한 다 는 것 을 알 수 있다.실제 집행 상황 은 대략 다음 과 같다. var a;// , function a(){} 。
if (true) {
let a = function a(){} //
a = 1
window.a = a // a a
console.log(a)
}
console.log(a)
개인 이해 총화
결론 은 단지 개인 이 결과 로부터 유도 할 뿐, 문 서 를 찾 아 보지 않 고 얻 은 것 이기 때문에 반드시 정확 한 것 은 아니다.
(비 es6 상황 에서)
window.a = block.a
에 함수 성명 {}
이 존재 할 때 js 집행 상황 은 다음 과 같다.function a(){}
에 들 어가 임시 {}
가 발생 하고 Block
함수 가 function
로 향상 되 었 습 니 다.Block
의 정의 문 구 를 실행 할 때 까지 function
에서 이 함수 이름 의 속성 을 전역 (이 속성 심지어 유형 을 바 꾸 더 라 도) 에 할당 합 니 다. 예 를 들 어 Block
.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.