스코프(scope)란??
- 모든 식별자(변수, 함수, 클래스 등)는 자신이 선언된 위치에 의해 다른 코드가 자신을 참조할 수 있는 유효 범위가 결정되는데 이를 스코프라고 부릅니다.
라고한다
var x = 99; // global scope : 전역 변수 // 다른코드랑 결합될수도 있음 최대한 안쓰는게좋음
var y = true;
function foo () {
var x ='홍길동'; // local scope : 지역 변수
console.log(`foo x: ${x}`);
var y = '메롱';
console.log(`foo y: ${y}`);
var z = 100;
return x;
}
전역 변수는 쓰지 않는 것이 좋다.
// 중첩 함수 : 함수 안에 함수를 정의
function outer(m) {
var n ='outer local n';
var v ='outer local v';
console.log(n);
console.log(v);
console.log(m);
// 헬퍼 함수 : 바깥쪽 함수 전용함수 (밖에서 호출 불가능)
function inner() {
console.log(n);
var m = 'inner local m';
console.log(m);
}
inner();
}
outer('outer param m');
var 키워드의 한계
변수 중복 선언 허용
- var 키워드로 변수를 선언하면 동일한 이름으로 중복 선언시 var 키워드를 안 붙인 것처럼 동작
- 변수를 중복 선언하면 의도치 않게 변수의 값이 변경되는 부작용이 발생.
블록 레벨 스코프를 지원하지 않는다!
- var 키워드 변수는 오로지 함수의 영역만을 지역 스코프로 인정.
- 함수가 아닌 블록들에서는 모두 전역 변수로 일괄 적용
- 전역 변수를 남발할 가능성이 커지는 문제.
변수 호이스팅 문제
- 호이스팅에 의해 변수 선언문이 자동으로 맨 위로 끌어올려진 것처럼 동작
- 이는 프로그램의 흐름을 방해하여 코드의 가독성과 유지보수성을 현격하게 떨어뜨립니다.
그래서 보통 let과 const를 쓰는데 걍 웬만하면 const쓰고 for문에서 처럼 변경이 필요한 애들은
let으로 변수지정 해주면됨
// 호이스팅이 된다 : 함수를 먼저만들고 나중에 위치를 바꿀수 있다는거임 //
그니까 호출부 아래 함수가있어도 된다
'JavaScript' 카테고리의 다른 글
[중앙정보처리학원] JavaScript* 콜백 (Callback) (1) | 2024.03.29 |
---|---|
[중앙정보처리학원] JavaScript* 화살표 함수 (1) | 2024.03.29 |
[중앙정보처리학원] JavaScript* 다중 매개변수와 다중 변환값 (0) | 2024.03.28 |
[중앙정보처리학원] JavaScript* 함수 quiz (1) | 2024.03.28 |
[중앙정보처리학원] JavaScript* 리턴(Return) (0) | 2024.03.27 |