문제 풀이 JS 역할 영역

1815 단어
아침 에 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() 호출 순 서 를 바 꾸 면 답 도 다 릅 니 다.

좋은 웹페이지 즐겨찾기