돌아가기

함수가 최신 변경 사항을 반영할까요?

중요도: 5

함수 sayHi는 외부 변수 name을 사용하고 있는데, 함수가 실행될 때 두 외부 변수 name 중 어떤 값이 사용될까요?

let name = "보라";

function sayHi() {
  alert(name + "님, 안녕하세요.");
}

name = "지민";

sayHi(); // "보라" 혹은 "지민" 중 무엇이 출력될까요?

이런 상황은 클라이언트, 서버 개발 모두에서 흔하게 발생합니다. 함수는 이미 생성되어 있는데, 사용자의 특정 작업 이후나 네트워크 요청 이후같이 특정 조건을 만족한 후에 함수 호출을 하게 되는 경우는 종종 발생합니다.

자, 그럼 다시 질문으로 돌아가 봅시다. 이 함수는 name 변경 사항을 반영할까요?

정답은 지민입니다.

함수는 외부 변수의 현재 값 즉, 가장 최신의 값을 사용합니다.

이전 값은 어디에도 저장되지 않습니다. 함수에서 변숫값을 사용할 땐 해당 함수의 렉시컬 환경 또는 외부 렉시컬 환경에서 해당 변숫값을 찾습니다.