[SEB FE] section 1 unit 10 (3) 스코프 종합문제

동화·2022년 10월 6일
0

코드스테이츠

목록 보기
11/32
post-custom-banner


1번

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

let result = get(20);

get 함수는 x를 반환하고, 이때의 x는 get 함수 스코프 내에 x 변수가 별도로 선언되어 있지 않기 때문에 전역스코프의 x

따라서 result 에는 30이 할당된다.

get(20)에서 20은 사용되지 않는 값




2번

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

let result = get(20);

get 함수가 반환하는 x 는 전역스코프의 x가 아닌, get 함수에 별도 선언된 매개변수 x

따라서 result는 30이 아닌 get 함수의 전달인자 20




3번

let x = 30;

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

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

get 함수는 전역에 선언된 x를 반환하고,
set 함수는 value를 통해 받은 값을 x에 할당. (set 함수 내에서 별도로 선언된 x)
따라서 set(10)을 해도 전역의 x는 여전히 30




4번

let x = 30;

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

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

답은 10.

set 함수는 value에서 받은 값을 전역 변수 x에 할당한다.
즉 set(10)이 실행되면 x의 값이 30에서 10으로 변경된다
get(20)의 20은 result 값에 아무런 영향을 미치지 않는다.




5번

let x = 30;

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

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

get 함수가 전달된 20을 반환하므로 답은 20.
set(10)은 전역변수의 x값을 바꿈




6번

let x = 10;

function add (y) {
  return x + y;
}

function strangeAdd (x) {
  return add(x) + add(x);
}

let result = strangeAdd(5);

strangeAdd 함수는 매개변수 x를 통해 전달받은 값을 다시 add 함수에 전달하는 구조
add 함수는 매개변수 y를 통해 받은 값을 전역에 선언된 x 와 더해서 반환
strangeAdd(5) 는 add(5) + add(5) 이고
add(5) 는 x + 5 이며 이때x는 전역에 선언된 10 이므로 15

따라서 15 + 15 한 30이 답이다.




7번

let x = 10;

function outer () {
  let x = 20;
  function inner () {
    return x;
  }

  return inner();
}

let result = outer();

outer 함수에는 20을 값으로하는 x와 inner 함수가 있고
outer 함수가 실행되면 inner함수를 실행시킨 값을 반환한다
inner 함수는 x를 반환하는데 inner 함수에는 x 값이 없으므로 바로 위의 함수에서 가져오게 된다

따라서 result 는 20 (안쪽 스코프부터 바깥스코프로 순차적인 스코프 체이닝 발생)




8번

let x = 10;

function outer () {
  let x = 20;

  function inner () {
    x = x + 10;
    return x;
  }
  inner();
}

outer();
let result = x;

outer 함수 실행 -> inner 함수 호출되어 x값이 30이 됨.
하지만 이 값은 outer 함수 스코프 내 변수 x 값이 30으로 바뀐 것일 뿐
결과 값에 할당된 것은 전역스코프의 x 이므로 outer 함수가 호출되어도 아무런 영향을 받지 않는다.

따라서 답은 10




9번

let x = 10;

function outer () {
  x = 20;

  function inner () {
    let x
    x = x + 20;
    return x;
  }
  inner();
}

outer();
let result = x;

outer 함수내에서 전역변수 x 를 20으로 바꿈
outer 함수가 inner 함수를 실행시켜 inner 함수 내에 있는 x 값이 40으로 바뀌긴 하지만,
이것은 inner 함수 스코프 내의 변수값일 뿐 전역변수엔 영향을 미치지 않는다.

따라서 답은 20




10번

let x = 10;

function outer () {
  x = 20;
  function inner () {
    x = x + 20;
  }
  inner();
}

outer();
let result = x;

outer inner 함수모두 전역의 선언된 X값은 변경하게 됨

따라서 20 + 20 = 40이 답

post-custom-banner

0개의 댓글