채널톡 아이콘

인프런 커뮤니티 질문&답변

RooRoo님의 프로필 이미지

작성한 질문수 15

인터랙티브 웹 개발 제대로 시작하기

3개의 문 5

변수 범위 관련 질문

작성

·

30

0

let currentItem;
function activate(elem){    // 활성화 : 문열기
    elem.classList.add('door-open');
    currentItem = elem;
}
 
function inactivate(elem){  // 비활성화 : 문닫기
     elem.classList.remove('door-open');
}

이 부분에서요, let, const 변수는 범위가 {} 기준이라고

알고있습니다.

그런데, activate()에서 currentItem에 elem값을 넣어주면서 {} 범위가 끝났는데,

inactivate()에서 currentItem의 값을 확인하고 실행한다는게 이해가 잘 안됩니다.

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. RooRoo님.

질문해주신 내용은 JavaScript의 변수 스코프(범위)와 관련된 부분입니다. ‘let’과 ‘const’로 선언된 변수는 블록 스코프를 가지지만, 전역 변수로 선언할 경우엔 다른 함수 내에서도 접근할 수 있습니다. 여기서 핵심은 ‘currentItem’ 변수가 함수 바깥에 선언되어 있어 전역 범위를 가진다는 점입니다.

블록 스코프는 함수를 포함한 여러 코드 블록이 있을 때 적용되는데, ‘let’이나 ‘const’가 사용되면 해당 블록 내부에서만 변수가 유효하게 됩니다. 그러나 ‘currentItem’은 함수 외부에서 선언되어 있기 때문에, 두 함수 모두 이 변수에 접근하고 값을 변경할 수 있습니다.

함수 activate()에서 ‘currentItem’에 값을 할당하면 그 값은 전역으로 유지되어, 나중에 inactivate() 함수에서도 같은 ‘currentItem’을 참조할 수 있게 됩니다.

추가적으로 유사한 질문에 대한 답변도 확인해보시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.