종우의 컴퓨터 공간

변수 선언 방식(var, let, const) & 스코프 본문

자바 스크립트 (JavaScript)/JavaScript Language Fundamentals

변수 선언 방식(var, let, const) & 스코프

종우공간 2021. 7. 23. 03:27

var

- ES6 이후부터 사용하지 않는다.

let(변수)

- 재할당(reassign)이 가능하다.

- block level scope를 가진다.

const(상수)

- 재할당(reassign)이 불가능하다.

- 처음 선언할 때 반드시 초기화(값 할당)을 해주어야 한다.

- block level scope를 가진다.

- 객체같은 경우에는 그 안의 필드의 값을 변경할 수는 있지만 그 객체 자체를 다른 객체로 변경할 수는 없다.

- 배열같은 경우에도 그 안의 값에 추가를 하거나 삭제를 하는 등 변경은 가능 하지만 그 배열 자체를 다른 배열로 변경할 수는 없다.

const person = {
    name: 'Jongwoo',
    age: 29
}

person.name = 'James';

console.log(person); // name이 James로 바껴서 출력된다.

person = { //ERROR
    email: 'limjongwoo1994@gmail.com',
    age: 29
}

const number = [1, 2, 3, 4, 5]

number.push(6);

console.log(number); // prints out [1, 2, 3, 4, 5, 6]

number = [1, 2, 3, 4, 5, 6]; //ERROR

Scope

// Global Variables
var a = 1;
let b = 2;
const c = 3;

// Function Scope
function test() {
    var a = 4;
    let b = 5;
    const c = 6;

    console.log('Function Scope: ', a, b, c); //yields 'Function Scope: 4 5 6
}
test();
console.log('Global Scope: ', a, b, c); //yields 'Global Scope: 1 2 3

// Block Scope
if(true) {
    var a = 4;
    let b = 5;
    const c = 6;

    console.log('If Scope: ', a, b, c); //yields 'If Scope: 4 5 6
}
console.log('Global Scope: ', a, b, c); //yields 'Global Scope: 4 2 3

for(let b = 0; b < 10; b++) {
    console.log(`Loop: ${b}`);
}
console.log('Global Scope: ', a, b, c); //yields 'Global Scope: 4 2 3

for (var a = 0; a < 10; a++) {
    console.log(`Loop: ${a}`);
}
console.log('Global Scope: ', a, b, c); //yields 'Global Scope: 10 2 3

- var은 function scope을 가지기 때문에, block level에서는 global variable에 영향을 준다.

- let과 const는 block scope을 가지기 때문에, global variable에 영향을 주지 않는다.

결론

- 변수 자체가 변경 될 필요가 없다고 생각이 들면 const를 최우선적으로 사용하여 코드의 가독성을 높힌다.

- let은 변수 값을 재할당할 필요가 있을 때에만 사용한다.

- var이라는 선언방식도 있지만 ES6 이후부터는 사용하지않는다.

'자바 스크립트 (JavaScript) > JavaScript Language Fundamentals' 카테고리의 다른 글

템플릿 문자열(Template Literals)  (0) 2021.07.24
String Methods  (0) 2021.07.24
The Math Object  (0) 2021.07.24
형 변환(Type Conversion)  (0) 2021.07.24
데이터 타입(data types)  (0) 2021.07.23