• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 변수 문제에 대해 질문 드립니다.

변수 문제에 대해 질문 드립니다.

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #28421

    wyk
    참가자

    정렬 알고리즘을 공부를하다가 반복문 안에서의  var 변수와 let 변수의 범위에 대해 궁금하여 다시 강의를 듣던 중, 헷갈리는 설명이 있어 질문 남깁니다.

    for (var i = 1; i < 6; i++) { setTimeout(function() { console.log(i); }, i*1000 ); }

    for (let i = 1; i < 6; i++) { setTimeout(function() { console.log(i); }, i*1000 ); }

    위 문제의 해법은 var를 let으로 바꾸면 된다고 설명해 주셨는데 그 이유가 var를 사용한 반복문이랑 let을 사용한 반복문의 차이는 단지 let의 범위가 var과는 다르게 중괄호에서만 사용 가능해서 인가요? var를 사용한 반복문이 실행되고 남은 자리에는 var = 6 이라는 전역변수가 생긴다고 하셨는데 왜 전역변수가 생성이 되는 건가요?  var을 사용하여 만든 반복문과 let을 사용하여 만든 반복문의 차이를 알려주시면 감사하겠습니다.

    그리고 

     function insertionSort(arr) {
            for (let i = 1; i < arr.length; i++) {
              let currentVal = arr[i];
              for (var j = i - 1; j >= 0 && arr[j] > currentVal; j--) {
                arr[j + 1] = arr[j];
              }
              arr[j + 1] = currentVal;
            }
            return arr;
          }

    위 함수에서 내부 반복문에서 let을 사용하면 당연히 let의 범위를 벗어나기에 7번째 줄의 실행되면 j가 정의되지 않았다는 오류가 뜨는데, let을 var로 바꾸어 실행하면 문제없이 잘 실행되는데 여기서 let이 아닌 var을 사용했을 때 어떤 이유로 작동이 잘되는 건지 설명해주시면 감사하겠습니다 !!

    #28449

    codingapple
    키 마스터

    var 변수는 범위가 함수입니다

    반복문 안에서 var 만들어도 함수는 아니라 밖으로 탈출해서 반복문 바깥공간에 저장됩니다

    let은 반복문 안에서 만들면 반복문 안에 저장됩니다 

    밑의 예제는 둘째 반복문안에서 let j를 만들었는데

    반복문 바깥에서 arr[j + 1] = currentVal; 이렇게 j를 쓰고있어서 변수가 없다고 에러를 내줄 뿐입니다 

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠