상세 컨텐츠

본문 제목

Primitive & Reference type (Checkpoints) - Javascript

Programming/Concept

by 쌩우 2019. 6. 3. 20:57

본문

Primitive type data의 선언 - setTimeOut 함수 실행 타이밍

function foo () {
  var data = 10;

  bar(function (players) {
    data = players;
  });

  return data;
}

function bar (callback) {
  callback(20);
}

var result = foo(); // result === 20; callback 함수를 실행하면서 data라는 전역변수 값을 20으로 바꿔준다. 
function foo () {
  var data = 10;

  bar(function (players) {
    data = players;
  });

  return data;
}

function bar (callback) {
  setTimeout(function () {
    callback(20);
  }, 500);
}

var result = foo();
/*
foo() 실행 시, bar 내의 setTimeout으로 callback 함수가 태스크 큐에 넘어간다.
callback 함수가 500ms 이후 실행되기 전에 return data를 하여, var result = 10;으로 선언된다.
*/

Reference Type

  • 주소값의 직접 변경

    var myArray = [2, 3, 4, 5];
    function doStuff(arr) {
    arr[2] = 25;
    }
    doStuff(myArray); 
    /*
    function doStuff의 parameter에는 myArray의 주소값이 대입되고, myArray[2]는 [2, 3, 25, 5]로 바뀐다.
    주소값 자체에서 값을 바꿔주었기 때문에 myArray가 변한다.
  • 주소값이 변경되지 않는 경우1

    var myArray = [2, 3, 4, 5];
    function doStuff(arr) {
    arr = [ ];
    }
    doStuff(myArray);
    /*
    doStuff의 parameter로 myArray의 주소값이 대입되지만,
    arr = [ ];에서 실제 주소값을 변경시키진 않는다.
    arr라고 하는 변수의 값이이 비어있는 배열의 주소값을 바라보게 하는 코드이다.
    결국 myArray는 원래의 값을 그대로 가지고 있게 된다.
    myArray = [2, 3, 4, 5]
  • 주소값이 변경되지 않는 경우2

    var player = { score: 3 };
    function doStuff(obj) {
    obj.score = 2;
    obj = undefined;
    }
    doStuff(player);   
    /*
    doStuff(player)를 실행하면,
    parameter로써 player의 주소값이 대입된다.
    이 후 function 내에서, 주소값의 key가 score인 value를 2로 바꿔준다.
    그 다음 줄의 obj = undefined; 는 obj 라고 하는 변수가 undefined라고 선언하는 것이 된다.
    결국 player는 원래의 값을 그대로 갖고 있게 된다.
  • 입력한 주소값이 함수 내의 변수와 무관한 경우

    var player = { score: 3 };
    function doStuff(obj) {
    obj = {};
    }
    
    player = doStuff(player); // player는 undefined
    
    // doStuff에 player가 가리키는 주소값이 대입된다.
    //이 후 함수 내에서는 obj라고 하는 변수가 {}의 주소값을 가리키게 한다.
    //하지만 이 후 obj라는 변수를 return 해주지 않았으므로,
    //함수 실행의 결과는 undefined가 된다.
    //결국, player = undefined와 같은 뜻이 된다.
    
    



 

관련글 더보기

댓글 영역