메뉴 건너뛰기

2021.08.19 20:57

질문 있습니다.

조회 수 134 댓글 2

현재 처음부터 하면서 8장까지 오면서 들었던 의문인데 이해가 되지 않는 부분은 검색을 하면서 진행했습니다.

 

책에서는 var을 사용하지만 사람들은 let을 주로 사용하는 것처럼 보였습니다. 이 let은 책보다 더 나중에 추가된 것인가요?

겉으로 보기에는 둘의 차이점이 없어보이는데 어떤 것을 사용해도 상관 없는 건가요?

?
  • ?
    관리자 2021.08.20 00:34

    좋은 질문입니다.
    1. 2016년 경에 ES6 표준이 발펴되면서 let이 추가되었습니다.
    자바스크립트 언어는 ES 표준에 따라 만들어지는 언어입니다. 그래서 let이 자바스크립트에 추가되었습니다.
    교재를 집필할 당시에는 일반적으로 var를 사용하여 let이 익숙하지 않았기 때문에 책에 넣지 않았습니다.

    2. var와 let의 차이점을 설명하고 또 아는 것이 약간은 어렵습니다.
    일반적으로 제대로된 개발자들에게 var가 문제가 많은 것은 아닙니다. 만일 그랬다면 과거부터 지금까지 var로 작성된 많은 코드들이 문제가 있었겠지요.
    다만 개발자들이 실수할 가능성이 있는데 지금부터 간단히 설명해보겠습니다.
    프로그래밍 언어를 공부할 때, 개발자가 반드시 체크해야하는 중요한 개념이 있습니다. 그것은 변수의 범위 규칙입니다.
    var로 선언하는 변수의 범위 규칙은 함수를 중심으로, 함수 밖에 선언되면 전역 변수, 함수 내에 선언되면 지역 변수로 다루고, 전역 변수는 프로그램 어디서나 접근할 수 있고, 지역 변수는 함수 내에서만 접근할 수 있어요.

    그런데 let으로선언되는 변수는 블록을 중심으로 범위 규칙이 따져집니다. 블록이란 if 블록, while 블록들로 생각하면 되고요, { }로 묶을 수 있는 것이 블록이라고 생각하면 됩니다.
    (또 한가지 var를 이용하면 변수를 재선언할 수 있지만, let은 변수의 재선언을 허용하지 않습니다.)
    이제 var에 문제가 생기는 부분만 알아봅시다. 다음 코드가 실행되면 콘솔창에 무엇이 출력될까요?

    var flag = 1
    var x = 1; // 전역 변수 x 선언
    if(flag == 1) {
        var x = 2; // 전역 변수 x를 다시 선언, 이전의 x는 사라짐
    }
    console.log(x); // flag가 1인 경우 콘솔창에 2가 출력되고, flag가 1이 아닌 경우 콘솔창에 1이 출력됩니다.

    만일 개발자가 생각을 잘못하거나 잠깐 착각하여 if 문 안에서 var x=2로 변수 x를 재선언한다고 해도 오류가 나지 않습니다. 변수 x의 재선언으로 인해 if 문의 조건에 따라 출력되는 결과가 달라집니다. (개발자의 의도가 전역변수 x를 재선언하고 값을 2로 바꾸려는 것이었다면 if 문안의 선언은 전혀 문제가 없습니다. 오히려 잘하는 것이지요.)

    이런 문제를 해결하기 위해 let이 만들어졌습니다.
    앞의 코드를 let을 이용하여 다시 만들어봅시다.

    let flag = 1
    let x = 1; // 전역 변수 x 선언
    if(flag == 1) {
        let x = 2; // if 블록 안에서만 사용되는 변수 x 선언
        console.log(x); // 콘솔창에 2가 출력됩니다.  if문이 종료하면 이곳에 선언된 변수 x 사라짐
    }
    console.log(x); // 전역 변수 x 사용, 콘솔창에 1이 출력됩니다.

    이처럼, if 블록 안에 변수 x를 선언하면 이 변수 x는 if 안에서만 유효하며, if 문의 실행이 끝나면 사라집니다.
    변수의 사용 범위가 명확해졌죠.

    이것이 let이 나온 이유입니다.

    3. var를 사용하면 안되는가? 그렇지 않습니다. 잘된 개발자는 if 문안에 var로 동일한 변수를 선언하지 않습니다. 그래도 실수할 수도 있겠죠.
    그래서 요즘은 let을 사용하도록 권합니다.

    4. 안그래도 내년쯤에는 책을 인쇄할 때 let으로 바꾸려고 생각하고 있습니다.

  • ?
    2021.08.20 01:15
    자세한 답변 감사합니다. 잘 이해되지 않아서 여기저기 검색해봤지만 이 정도로 명쾌하지는 않았는데 덕분에 오늘은 편히 잘 수 있을 것 같습니다...

QnA

공부하면서 궁금했던 것을 질문해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18275
403 혹시 예전 서적인 "DHTML + 자바스크립트 프로그래밍"의 예제를 받을 수 있는 방법은 없는지요? 2 비만타쿠미 2018.09.26 116
402 한글html 1 키보드 향기 2020.03.29 922
401 한글 타이틀이 깨져 보입니다. 1 안스가리오 2020.01.06 116
400 표와 div span 4 키보드 향기 2020.04.05 109
399 페이지에 첨부하고 싶은 이미지의 위치에대해 궁금합니다 1 정택희 2017.02.13 277
398 페이지 247 에 있는 Open Challenge 05 의 CSS3로 태그 배치하기를 공부하고 있는데 질문드립니다. 1 file 워니고 2018.03.28 3875
397 테스트 관리자 2019.08.30 171
396 태그와 속성 2 tc0712 2021.09.08 72
395 크롬 오디오 자동재생 관련 질문입니다! 1 ^_^ 2018.09.30 449
394 코드 잘못된 부분을 봐주시면 정말 감사하겠습니다 1 file 입문한 사람 2020.04.01 607
393 캔버스 관련 질문 1 원그리기 2021.08.22 101
392 챕터2 연습문제 8번 김석현 2018.04.22 156
391 챕터 3의 10번 문제 1 컴공과 입문 2018.03.20 125
390 책을 종이책으로 구매했는데 1 ddd 2024.03.21 95
389 책을 마치며 7 은성 2017.04.13 492
388 책 151p 3장 오픈챌린지 문제질문입니다. 3 이상민 2019.07.19 238
387 짝수번 정답 3 idididid 2017.12.24 3133
386 질문입니다 1 1213 2018.03.06 420
385 질문드립니다. 1 ㅇㅇ 2020.06.03 306
» 질문 있습니다. 2 2021.08.19 134
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로