자바스크립트 변수 스코프에 대해 질문드립니다.
강사님 안녕하세요
변수 스코프에 대해 질문드립니다.
자바스크립트는 변수를 참조할 때 현재 블록 부터 시작해 상위 블록으로 올라가며 변수를 찾는다고 이해하고 있습니다.
그래서 아래의
1번째 코드는 이해가 됩니다.
const b=10;
함수(a=>({
a: b //b는 10입니다.
}));여기서 2번째 b는 상위 블록으로 올라가며 const b =10 을 찾습니다.
그래서 a: 10이 됩니다.
그러나 2번째 코드의 경우 이해가 어려웠습니다.
const b=10;
함수(b=>({ //b는 undefined 입니다.
a: 11
}));이때는 콜백함수의 매개변수 b에 10이 아닌 undefined가 들어갑니다.
여기서 이해가 어려웠습니다.
자바스크립트는 변수를 참조할 때 현재 블록 부터 시작해 상위 블록으로 올라가며 변수를 찾습니다.
그렇다면 1번째 코드처럼 2번째 코드에서도 파라미터 b에 10이 들어간다고 생각했는데, 제가 잘못 생각한 부분을 가르쳐주시면 감사하겠습니다.
답변 1
1
아래 함수의 b는 매개변수 b입니다. 바깥에 있는 b와 다른 새로운 변수를 선언한 겁니다.
참고로 매개변수 b는 함수 호출 시에 인수로 그 값이 할당됩니다.
0
강사님 답변 주셔서 감사합니다
혹시 이렇게 이해해도 되나요?
1.
함수를 호출할 때마다,
호출스택에 해당 함수의 지역변수들이 담기는 지역이 할당됩니다.
2.
2번째 경우는 다른 지역에 위치한 변수이므로, 함수 내의 매개변수 b가 바깥의 변수 b를 참조할 수가 없습니다.
3.
1번째 경우의 함수 안에 있는 b는 새로운 변수를 선언한 것이 아닙니다.
C언어로 비유하면 새로운 지역변수를 선언한 것이 아니라, 포인터의 개념으로 바깥의 b를 참조합니다.
4.
1번째 경우의 함수 안에 있는 b는 바깥의 b를 그대로 따라서 const 입니다.
2번째 경우의 함수 안에 있는 매개변수 b는 let 입니다.
으로 이해했습니다.
0
저는 지금까지 var let const this 로만 변수 스코프를 알고 있었는데, 함수 안에 있는 변수가 매개변수인지, 아니면 어떤 위치에 있는지에 따라서도 다른가보네요
아래처럼 이해하면 되는군요
1번째 코드
const b =10;
함수(a=>({c:b})
//함수(a=>({c:10})과 같습니다.
2번째 코드
const b =10;
함수(b)
// 함수(10) 과 같습니다.
// 이때는 b를 매개변수로 선언한 게 아니라 b의 값이 들어간 것이기 때문이죠3번째 코드
const b =10;
함수(b=>b*2)
//이때 b는 10 이라는 값이 들어간 게 아니라
//새로운 매개변수를 선언해준 것이기에 undefined가 들어갑니다.
드디어 이해가 된 것 같습니다.
늦은 시간에도 빠르게 확인해주시고 가르쳐주셔서 감사합니다.
깃헙 질문
0
82
2
강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.
0
76
1
aws - lightsail 이용 관련
0
58
1
4강 http 서버 만들때 ESM방식으로 해도 될까요?
0
81
2
모듈 사용 시 단점이 있나요?
0
81
1
node.js 버전 및 typescript 적용 문의
0
93
2
12.7. 방장기능(강퇴) 질문드립니다.
0
80
2
12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요
0
69
1
12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.
0
75
2
12.7.1스스로 해보기 질문되나요
0
95
3
시퀄라이즈 실습하기 질문드립니다.
0
196
9
<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.
0
97
2
크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.
0
113
2
구매 결제관련 질문입니다 !
0
122
1
다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제
0
133
2
node 설치 방법이 전혀다르게 바뀐것 같습니다.
0
152
2
12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류
0
122
2
무료/프리미엄 동시 소유 시 질문
0
117
1
비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?
0
135
2
10강 cors에러 localhost:4000으로 접속했을때 에러
1
159
2
webstorm 해결할 수 없는 변수 문제
0
154
2
혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?
0
149
2
LightSail 실행 중 오류 질문드립니다!
0
204
2
RedisStore 사용법 질문
0
131
2





