inflearn logo
강의

講義

知識共有

JavaScript中上級:エンジン核心

실행 컨텍스트 질문입니다!

242

jjojjo1419959104

投稿した質問数 10

0

function a() {
  var value = 456;
  console.log(value);
  function b() {
      console.log(value);
      function c() {
          console.log(value);
          function d() {
              console.log(value);
          }
          d();
      }
      c();
  }
  b();
}
a();

선생님 이 코드에서 value가 전부 456으로 출력이 되는 이유를 모르겠습니다.

d() 함수에서 선언적 환경 레코드와 외부 렉시컬 환경참조 안에는 어떠한 변수도 참조되지 않을거같은데

1. 제가 스코프 영역에대해 잘못알고있는건가요?

2. d() 또는 c()의 스코프 영역이 어떻게되나요?

javascript

回答 2

2

tonextday

456이 출력되는 이유는 외부 렉시컬 환경 참조 때문입니다.  d()에서 우선 선언적 환경 레코드에서 value를 찾습니다. 그런데 없으므로 외부 렉시컬 환경 참조에서 찾습니다. 그런데 없으므로 다시 외부 렉시컬 환경 참조의 외부 렉시컬 환경 참조에서 찾습니다. 이런 방법으로 계속 외부 렉시컬 환경 참조를 따라 올라가면서 value 변수를 찾습니다.

d()의 스코프는 c()이고 c()의 스코프는 b()입니다. 따라서 d()의 스코프는 c()도 되고 b()도 됩니다. 물로 a()도 됩니다.

 

1

jjojjo1419959104

감사합니다!!

getBook 실습 예제중 질문드립니다!

0

419

1

__proto__ 에 대해 질문드립니다

0

315

1

호이스팅 코딩시간 풀이

0

358

1

[코딩 시간] JS {name: value} 이해

0

340

1

[[Scope]] 와 [[Environment]]는 같은 개념인가요

0

345

0

slice

0

239

0

스코프가 뭔가요?

0

307

0

어려워요

0

255

0

강사님 변수이름에 get을 붙이는 이유를 알고싶습니다.

0

339

1

[정리 시간] 정확하게 이해했는지 확인 부탁드립니다.

0

300

0

스코프 질문

0

253

1

fn 함수와 book.get 함수 차이 질문드립니다...ㅠㅠㅠ

1

542

1

this binding 논리 질문입니다.

0

279

1

파라미터 값을 매핑할 때

0

251

0

ES6부터는 this 바인딩을 환경 레코드에서 참조한다고 들었습니다.

0

209

0

정리시간 입니다.

0

228

0

정리시간입니다.

6

269

0

정리 시간 입니다.

0

202

0

정리시간입니다.

6

227

0

코딩시간 입니다.

1

222

0

선생님 스코프 질문이 있습니다.

1

240

0

[정리시간] 해보았습니다!

0

175

0

선생님 질문있습니다!!

0

159

0

질문드려도 될까요 선생님..

0

216

0