문제 풀이 JS 역할 영역
var a = 1;
function fn() {
console.log('1: ' + a);
var a = 2;
bar();
console.log('2: ' + a);
}
var a = 3;
function bar() {
console.log('3: ' + a)
}
fn();
너 는 먼저 자신의 답안 을 쓴 후에 정 답 을 비교 할 수 있다. 만약 틀 리 면 어디 에 문제 가 생 겼 는 지 보 자.정 답 은...
// 1: undefined
// 3: 3
// 2: 2
모든 JS 프로그램 은 전역 적 인 역할 영역 을 만 들 고 함 수 를 실행 합 니 다. 예 를 들 어
fn()
부분 적 인 역할 영역 을 만 듭 니 다.함 수 를 실행 할 때 변 수 를 찾 는 과정 은 다음 과 같 습 니 다. 현재 역할 영역 을 먼저 찾 은 다음 에 필요 한 변 수 를 찾 을 때 까지 한 단계 씩 위로 찾 습 니 다.위의 예 에서 집행 fn()
을 먼저 fn
에서 찾 아 보 니 var
은 하나의 변수 var
를 정 의 했 고 var
는 변수 가 향상 되 는 능력 을 가지 기 때문에 첫 번 째 로 인쇄 한 것 은 undefined
이다.ES6 의
let
, const
변 수 를 향상 시 키 는 기능 을 가지 지 않 습 니 다. 예전 에 JS 는 블록 급 역할 영역 이 없다 고 했 지만 let
, const
블록 급 역할 영역 에서 만 유효 하기 때문에 지금 은 잘못된 것 입 니 다.이 어 두 번 째, 집행
bar()
을 분석 했다. 먼저 bar()
안에 변수 a
가 있 는 지 살 펴 보 자. 답 은 없 는 지, 다시 한 층 으로 찾 아 보 자. 윗 층 은 함수 가 정 의 된 역할 영역 이지 함수 가 호출 된 역할 영역 이 아니 라 여기 서 전체 사용 영역 이기 때문에 두 번 째 출력 3: 3
이다.세 번 째 는 같은 이치 로 쉽게 얻 을 수 있다
2: 2
.var a = 1;
function fn() {
console.log('1: ' + a);
a = 2;
}
a = 3;
function bar(){
console.log('2: ' + a)
}
fn();
bar();
:
// 1: 3
// 2: 2
제 가 만 든 첫 번 째 답 은
1:1
입 니 다. 코드 의 실행 순 서 를 잘 모 르 기 때문에 함수 가 호출 되 지 않 으 면 함 수 를 정의 하 는 그 코드 는 실행 되 지 않 습 니 다.그래서 수출 1: 3
, 두 번 째 수출 2: 2
.함수 호출 의 위 치 는 매우 중요 합 니 다. fn()
와 bar()
호출 순 서 를 바 꾸 면 답 도 다 릅 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.