스코프 예제

2023. 1. 3. 11:02코드스테이츠/예제모음

종합퀴즈

let x = 30; // 전역스코프
function get () {
  return x; 
//get 함수 내에 별도로 x라는 변수가 선언되지 않았기때문에 전역스코프 x를 반환한다.
}

let result = get(20); 
//전달인자 20을 주어도 get함수에는 매개변수가 없기때문에 그냥 전역스코프 x의 값인 30을 반환한다.

let x = 30; // 전역스코프
function get (x) {
  return x; // 여기서 리턴하는 x는 매개변수 x를 의미한다.
}

let result = get(20);
// 매개변수 x가 전달인자 20으로 대체되면서 get함수는 20을 리턴하게된다.

let x = 30; // 전역스코프

function get () { return x; } // get의 x = 30
// get함수에는 선언된 변수 x가 없으므로 전역스코프에 선언된 x를 리턴한다.
function set (value) { let x = value; }  // set의 x = 10
// set 함수에서는 매개변수 value가 있어 전달인자를 받아오지만, 함수내에서 새롭게 선언된 x는 get의 x와는 다르다

set(10);
let result = get(20);
//get에 전달인자 20은 아무 의미없으므로 result는 30을 리턴하게 된다.

let x = 30; // 전역스코프

function get () { return x; } // 여기서 x 는 30
// get함수 내에 선언된 x는 없으므로 전역스코프 x의 값을 리턴한다.
function set (value) { x = value; } // 여기서 x는 value값
// set함수내에 선언된 x는 없으므로 전역변수 x의 값을 value의 값인 10으로 할당한다

set(10); 
// value의 값은 10이므로 x = 10
let result = get(20); 
// 매개변수가 없어서 그냥 x를 반환하므로 result는 10

let x = 30; // 전역스코프 

function get (x) { return x; } // 매개변수가 있으므로 x = 매개변수
function set (value) { x = value; } // 매개변수가 있으므로 x = 매개변수

set(10);
// 전달인자 10을 전달해줘서 x = 10
let result = get(20); 
// 전달인자 20을 전달해줘서 x = 20

let x = 10; // 전역스코프 

function add (y) { // add 함수에 x는 선언되어있지 않으므로 x = 10
  return x + y; // 10 + y = 10
}

function strangeAdd (x) { // 매개변수 x가 있으므로 x = 5
  return add(x) + add(x); // 10+5 + 10+5 = 30
}

let result = strangeAdd(5); // 30

let x = 10; // 전역스코프

function outer () { // 함수 outer에서는 x를 선언했으므로 x = 20
  let x = 20;
  function inner () { // 함수 inner에서는 x를 선언하지 않았으므로 전역스코프 x값을 가져옴, x = 10
    return x;
  }

  return inner(); // 10
}

let result = outer(); // 함수 outer의 x 값은 20이므로 20을 반환한다.

let x = 10; // 전역스코프 

function outer () { // 함수내 x가 선언됐으므로 x = 20
  let x = 20;

  function inner () { // 함수내 x가 선언되지않았으므로 x = 10
    x = x + 10;
    return x; // inner의 x값은 10 + 10 = 20
  }
  inner(); // 20 반환
}

outer(); // 20반환
let result = x; // 전역스코프의 x값 10 반환

let x = 10; // 전역스코프

function outer () { // 함수내 x가 선언되지 않았으므로 전역스코프 x = 20
  x = 20;

  function inner () {// 함수내 x가 선언됐기때문에 전역스코프 x 는 가져오지 않는다.
    let x
    x = x + 20; // x + 20
    return x; // 20
  }
  inner();
}

outer();
let result = x; // 전역스코프 x의 값은 함수 outer에서 20으로 변경되었다.

let x = 10; //전역스코프 

function outer () { // 함수내 선언된 변수는 없으니 전역스코프의 x = 20
  x = 20;
  function inner () { // 함수내 선언된 변수는 없으니 전역스코프의 x = 20 + 20
    x = x + 20;
  }
  inner();
}

outer();
let result = x; // 40

let age = 27; // 26
    let name = 'jin'; //jimin
    let height = 179;

    function outerFn() {
      let age = 24;
      name = 'jimin';
      let height = 178;

      function innerFn() {
        age = 26;
        let name = 'suga';
        return height;
      }

      innerFn();

      expect(age).to.equal(26);
      expect(name).to.equal('jimin');

      return innerFn;
    }

    const innerFn = outerFn();

    expect(age).to.equal(27);
    expect(name).to.equal('jimin');
    expect(innerFn()).to.equal(178);
  });
});

스코프 회고

함수내의 변수가 블록스코프 내에 지역변수로 선언되었는지, 아니면 전역스코프에 선언된 전역변수를 참조해 왔는지를 확인하는게 스코프의 개념을 이해하는데 도움이 된 것 같다.

'코드스테이츠 > 예제모음' 카테고리의 다른 글

Git 설정 및 기본 명령어  (0) 2023.04.12
객체분해 예제  (0) 2023.01.04
spread / rest 예제  (0) 2023.01.03