// 전역 스코프 global scope , 블록 스코프 block scope , 함수 스코프(function scope)
let blockScopeVariable = "Available only in this block";
if(true) {
// var blockScope = "Visible inside this block";
let blockScope = "Visible inside this block";
console.log(blockScope);
}
// console.log(blockScope);
console.log(blockScopeVariable);
// console.log(blockScope);
// for (let i =0;i<3;i++) {
// console.log(i);
// }
for (var i =0;i<3;i++) {
console.log(i);
}
console.log(i);
function test() {
var test = "any words";
if(true) {
var test = "change words";
}
console.log(test);
}
test();
// 결론 :
// var를 사용하면 안되는 이유
// 자바스크립트의 변수 중 let, const, var는 각각 변수의 영향력이 미치는 범위가 다르다(scope가 다르다)
// let과 const는 block const를 가지고 선언된 블록 내에서만 유효하다.
// 하지만 var의 경우 block scope 보다 큰 함수 scope를 가지며, 이에 따라 예측 불가능한 코드를 작성하게 될 확률이 크다.
// let : 변수의 값을 필요에 따라 유연하게 변경해야할 때 사용
// const : 변수의 값을 변경할 필요없이 변경되지 않는 변수 = 상수를 선언할 때 사용
// 따라서 let, const 는 block scope이기에 유효권 바깥에서의 접근을 제한하고, 변수의 충돌을 방지하여
// 프로그램 안정성을 높일 수 있다.
// 1. var는 block scope 보다 영향권이 큰 함수 스코프를 가지며, 함수 내부 어디에서든 접근할 수 있게 된다.
// -> 이는 또 다른 변수를 만들 위험이 있다.
// 2. hoisting 문제 : let, const는 처음 hoisting 될 때 undefinend를 할당 안받음
// const나 let은 초기값을 undefined를 할당받지 않는다.
'Programming > Javascript' 카테고리의 다른 글
[Javascript]Synchronous Processing(동기) 와 Asynchronous(비동기)에 관하여 (0) | 2024.09.05 |
---|---|
[Javascript]순수함수와 비순수함수 (0) | 2024.08.23 |
[JavaScript] 자바스크립트에서의 클래스(Class) (0) | 2024.07.31 |
[Code Review, Prgoramming Style] 코드리뷰, 프로그래밍 스타일에 관하여.. (0) | 2024.07.30 |
[Javascript] this 객체 바인딩 , 함수 바인딩 (0) | 2024.07.29 |