DAY 6 - TIL
변수 선언
Name | Scope | 재정의 | 재선언 |
var | Function Scoped | 변경 가능 | 변경 가능 |
let | Block Scoped | 변경 가능 | 변경 불가능 |
const | Block Scoped | 변경 불가능 | 변경 불가능 |
Scope
변수에 접근할 수 있는 범위
Global Scope(전역 스코프)
변수가 중괄호({ })밖에 선언되면 어디서든 접근 가능한 전역 변수이며, 전역 스코프에 정의된다.
var people="jaekoo"
function whois() {
return people;
}
console.log(people); //결과값: jaekoo
var, let, const 아무거나 써서 전역 변수를 만들 수 있다.(괄호 밖에만 있으면)
Local Scope(지역 스코프)
중괄호({ })안에 선언되면 괄호 안에서만 호출이 가능한 지역 변수가 되고, 지역 스코프에 정의된다.
fuction funcA(){
let people="jaekoo";
console.log(people);
}
fuction funcB(){
console.log(poeple);
}
funcA(); //결과값: jaekoo
funcB(); //poeple is not defined
console.log(poeple); //referenceError: poeple is not defined
지역 스코프에는 두가지 스코프가 존재하는데, 바로 함수 스코프와 블록 스코프이다.
1. Function Scope
-함수 내부에서 선언된 변수
-함수내부에서만 접근 가능
2. Block Scope
-블록 { }안에서만 호출 가능
for(let i=0; i<10; i++) {
console.log(i);
}
// 전역스코프에서 선언한 변수 i 는 존재하지 않음으로 아래에서 ReferenceErrer을 일으킨다.
console.log(i); //ReferenceErrer
for(var i=0; i<10; i++) {
console.log(i);
}
//var 키워드로 선언한 변수 i 는 지역 스코프에서 선언되었지만 모든 스코프에서 접근 가능하다.
console.log(i); // 9
- 블록 스코프 안에서 let과 const 키워드로 선언한 변수는 스코프 안에서만 참조 가능하다.
- var 키워드로 선언한 변수는 블록 스코프를 무시하고 스코프 울타리 밖에서도 접근 가능하다. (var는 Only 함수 스코프만 따른다.)
Javascript Scope는 Lexical Scope를 따른다. 부모 블록에서 함수를 선언했으면 자식 블록에서도 호출이 가능하다.
호이스팅이란?
-코드가 실행하기 전 변수선언/함수선언이 해당 스코프의 최상단으로 끌어 올려진 것 같은 현상을 말한다.
-자바스크립트 실행 컨텍스트에 의한 선언이 코드 실행 보다 먼저 메모리에 저장되는 과정으로 인한 현상
이해쉬운 호이스팅 관련 글
자바스크립트 호이스팅(Hoisting)
(안내) 호이스팅의 원리에 대한 글을 추가로 포스팅했습니다. (19.10.13) 자바스크립트의 변수는 다른 언어들과 조금 다르게 동작합니다. 이는 때때로 개발자로 하여금 의도하지 않은 결과를 발생
yuddomack.tistory.com
https://hanamon.kr/javascript-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85%EC%9D%B4%EB%9E%80-hoisting/
[JavaScript] 호이스팅(Hoisting)이란? - 하나몬
❗️호이스팅이란? 호이스팅은 코드를 실행하기 전 변수선언/함수선언을 해당 스코프의 최상단으로 끌어올리는 것이 아니다. 호이스팅은 코드가 실행하기 전 변수선언/함수선언이 해당 스코프
hanamon.kr
https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html
[JavaScript] 호이스팅(Hoisting)이란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
정확히 호이스팅에 관한 개념이 몬지 모르겠다. 복잡하므로 이것은 따로 글 포스팅을 해야겠다.