JavaScript

Scope 이해하기 (By Checkpoint 1)

한이든 2020. 6. 26. 11:35

개념

 

: Scope refers to the current context of code, which determines the accessibility of variables to JavaScript. The two types of scope are local and global: Global variables are those declared outside of a block. Local variables are those declared inside of a block.

 

문제풀이 목적

 

: 전역 변수(Global varaiables)와 지역변수(Local variables)의 차이(Scope)를 이해한다.

 

 

1번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 30; 

function get () { return x; }

var result = get(20);

// get 함수는 인자로 아무것도 받지 않고 있으므로
// get 함수가 리턴하는 x는 전역의 x이다. 따라서 result의 값은 30이 된다

 

2번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 30;

function get (x) { return x; }

var result = get(20);

// get 함수는 인자를 받아서 받은 인자를 리턴한다. 따라서 result의 값은 20이 된다

 

3번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 30;

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

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

// get 함수는 전역의 x를 반환하고, set 함수는 인자를 받아 set 블록 스코프 안에서의 x를 선언하고 있다
// 이제 함수 실행줄을 보면 set(10)은 x를 10으로 만들지만 
// set 함수 안에서만 유효하므로 get(20)을 했을때의 결과는 30이 될 것이다

 

4번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 30;

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



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

// get 함수는 전역의 x를 리턴하고, set 함수는 전역의 x를 받은 인자로 초기화 시키고 있다
// 함수 실행줄로 가서 set(10)이 실행되면 현재 전역 x는 10이 되고
// 이에따라 전역 x를 반환하는 get(20)의 값은 10이 된다

 

5번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 30;

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

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

// get 함수는 인자를 받아 받은 인자를 반환한다. set 함수는 인자를 받아 전역의 x를 초기화한다
// 코드 실행줄로 가서 set(10)을하면 전역의 x는 10으로 초기화되지만 
// get은 받은 인자를 리턴하는 것이므로 20이 반환된다

 

6번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 10;

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

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

var result = strangeAdd(5);

// add 함수는 인자를 받아서 전역의 x와 더한 값을 반환한다
// strangeAdd 함수는 인자를 받아서 해당 인자를 인자로 받는 두개의 add 함수의 결과를 합한 값을 반환한다 
// result는 strangeAdd(5)이다. 따라서 아래와 같이 실행되게 된다

// strangeAdd(5) => add(5) + add(5)
// add(5) => 10 + 5
// add(5) + add(5) === 15 + 15
// 위와 같은 과정을 거쳐서 결과는 30이 되게 된다

 

7번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 10;

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

var result = outer();

// result는 outer 함수의 결과값이다. outer 함수는 inner 함수의 결과를 반환한다
// 따라서 outer 함수가 실행되면 outer 함수 안의 x를 inner 함수가 리턴하고 
// 이 inner 함수를 outer 함수가 리턴하므로 결과는 20이 된다

 

8번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 10;

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

outer();

var result = x;

// result는 outer 함수의 결과값이다. outer 함수는 inner 함수의 결과를 반환한다
// inner 함수는 전역의 x를 초기화하고 있다
// 따라서 outer 함수가 실행되면 inner 함수가 x를 리턴하고 결과는 10이 된다

 

9번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 10;

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

outer();

var result = x;

// result는 outer 함수의 결과값이다. outer 함수는 inner 함수의 결과를 반환한다 
// 이번에는 outer 함수가 전역의 x를 초기화하고 있다
// 따라서 inner 함수의 결과는 x를 outer함수에 반환해도 
// 지역변수이기에 전역변수에 간섭할 수 없으므로 결과는 20이 된다

 

10번 - 다음의 코드를 실행시킨 후에 result 의 값은 무엇이 될까요?

 

var x = 10;

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

outer();

var result = x;

// outer, inner 모두 전역의 x를 초기화하고 있다
// outer에서는 20으로 inner에서는 x = 20 + 20 즉 40으로 따라서 최종적으로 전역의 x는 40이다