[TIL - 2022.7.12] 클로저

Jeong Ha Seung·2022년 7월 12일
0

부트캠프

목록 보기
14/51

클로저는 언제 봐도 어렵다..

퀴즈 헷갈렸던 부분

let x = 30;
function get () {
  return x;
}

let result = get(20);

마지막 result 부분에서는 인자가 들어가있는데 왜 함수 바디 부분에서는 안 들어가있지? 했는데 다시 생각해보니 함수 실행 시에는 20이라는 값이 무시되고 전역에 선언된 30이라는 값이 들어간 후 리턴이 되는 것이다.

let x = 30;

function get () { return x; }
function set (value) { let x = value; }

set(10);
let result = get(20);

------------------------------------------

let x = 30;

function get () { return x; }
function set (value) { x = value; }

set(10);
let result = get(20);

가장 헷갈렸던 두 코드인데

우선 첫번째는 set(10)이 실행되면 스코프 내에서 x가 10으로 할당이 되는데 이 10이라는 값은 set 함수 내에서만 유효하기 때문에 전역에서의 x값은 30이다.
그리고 나서 get(20) 이 실행되는데 get 함수 구현 부분에서는 인자를 받지 않기 때문에 20은 무시되고 30이 나오게 된다.

두번째는 첫번째와 비슷하긴 하지만 set 함수 스코프 내에서 전역에 있던 x값이 10으로 변경된다.

profile
블로그 이전했습니다. https://nextjs-blog-haseungdev.vercel.app/

0개의 댓글