JavaScript 선언 향상
3360 단어 JavaScript성명올리다
JavaScript 선언 향상을 배우기 전에 다음 예제를 살펴보겠습니다.
console.log(a);
var a=2;
실행 결과는 무엇입니까?다음과 같은 추측이 있을 수 있다.1. ReferenceError: a is not defined;
2. 인쇄 2;
3. undefined를 인쇄합니다.
정확한 결과는 세 번째입니다. undefined를 인쇄합니다.
다음은 구체적인 원인을 살펴보자.사실, var a=2에 대해서는JavaScript는 다음 두 가지 선언으로 간주합니다.
따라서 위의 예는 이러한 절차에 따라 처리됩니다.
var a;
console.log(a);
a=2;
우리는 var 변수 성명이 향상될 뿐만 아니라 함수 성명도 마찬가지로 향상될 수 있다는 것을 알아야 한다. 지금 아래의 예를 보면
foo();
function foo(){
console.log(a);
var a=2;
}
이 예는 undefined를 인쇄하는 실행 결과입니다.이 코드는 실제로 다음과 같은 형식으로 이해됩니다.
function foo(){
var a;
console.log(a);
a=2;
}
foo();
2 성명 승급에 관한 흔한 질문2.1 함수 표현식
먼저 함수 표현식의 예를 보십시오.
console.log(foo);
var foo=function(){}
위 코드의 실행 결과는:undefined 인쇄입니다.실제로 변수 식별자 foo는 향상되었지만 그 부여 조작은 향상되지 않았다. 우리는 다음과 같은 형식으로 이해할 수 있다.
var foo;
console.log(foo);
foo=function(){}
결론: 함수 성명은 향상되지만 함수 표현식은 향상되지 않습니다.2.2 선언된 우선 순위
만약 같은 작용역 내에 동명의 함수 성명과 var 변수 성명이 존재한다면 어떤 상황이 발생할까요?우리는 마찬가지로 한 가지 예를 다시 보았다.
function a(){}
var a;
console.log(a);
var a;
function a(){}
console.log(a);
위의 두 가지 쓰기 방법은 실행 결과가 모두 인쇄 a () {}입니다.즉, 같은 작용역 내에 같은 이름의 함수 성명과 var 변수 성명이 존재한다면 함수 성명의 우선순위가 더욱 높다는 것이다.같은 작용역 안에 같은 이름의 함수 성명이 여러 개 존재하는 경우도 있다.이 경우, 뒤에 성명된 것은 앞의 성명을 덮어씁니다.
3 연습 문제
3.1 제1문제
var getName = function() {
console.log(1);
}
function getName() {
console.log(2);
}
getName();
답안: 인쇄 1해석: 승급 후 순서는 다음과 같다.
var getName;// ,
function getName() {
console.log(2);
}
getName = function() {//
console.log(1);
};
getName();
3.2 두 번째 문제
var a = 1;
function b(){
a = 10;
return;
function a(){
console.log(a);
}
}
b();
console.log(a);
답안: 인쇄 1해석: 우선, 우리는 성명의 향상을 정리해야 한다.
이 문제는 몇 가지 관건이 있는데, 우리는 알아야 한다.
함수 b 내의 a 함수는return 이후이지만 효력을 잃지 않습니다. 성명 향상이 발생하여 b 함수 작용역의 맨 위로 올라갑니다.
많은 어린이 신발(예를 들어 나TAT)은 이 문제의 답이 10이라고 잘못 생각할 수도 있다. 우리가 마지막에 b 함수를 호출하여 전역 변수 a를 수정했다고 생각할 수도 있다.실제로 함수 a에 성명 향상이 발생하여 함수 b 내에서 전역 작용역의 변수 a를 가리기 때문에 a=10;사실은 함수 a를 다시 부여하는 것이다.진일보한 테스트를 위해 여러분은 a 함수를 주석할 수 있습니다. 이때 답이 10이 되었다는 것을 발견할 수 있습니다.
주: 본 문제는 패키지 관련 지식도 언급되었는데 이 문제에 대한 상세한 해석은 참고자료[2]를 참고하여 매우 상세하게 설명하십시오.
var a;// a
function b(){
function a(){// a
console.log(a);
}
a = 10;// a , a
return;
}
a = 1;// a
b();
console.log(a);
4 참고 자료[1] 《 네가 모르는 자바스크립트 》
[2] js에서 변수 이름과 함수 이름의 중명 문제, Charles_Tian
[3] 함수 성명과 변수 성명의 향상 메커니즘 우선순위 문제, 채소새의 분투사
다음은 자바스크립트 성명 향상에 대한 상세한 내용입니다. 자바스크립트 성명 향상에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.