analogcoding

6/3 / callback , value 본문

Be well coding/In Immersive

6/3 / callback , value

be well 2019. 6. 3. 22:23

S/A

 

 Tree 구조에서 psuedoclassical instantiation 방식으로 map() 메소드를 추가 구현.

 

 

 

체크포인트 리뷰

 

8. javascript call back

 

비동기함수에서의 큐 로 인해 리턴 값이 변하는 예제.

function foo () {
  var data = 10;

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

  return data;
}

function bar (callback) {   // callback함수를 인자로 받고
  setTimeout(function () {  // setTimeout 에 첫 인자로 그 함수에 인자를 20을 넣어 5초 뒤 실행.
    callback(20);
  }, 500);
}

var result = foo();
function foo () {
  var data = 10;

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

  return data;
}

function bar (callback) {
  setTimeout(function () {  // 비동기 함수 큐에 들어가서 시간이 흐른 뒤 실행 된다.
    callback(20);           // 4번 줄에서는 아직 큐에 있으므로 data 는 10
  }, 500);
}

var result = foo();

 

9. Value vs Reference

 

복사와 참조에 대해 배우고 굉장히 어려웠던 포인트.

var x = 2;
var y = x; 
y = 3;

x = 2

var x = { foo: 3 };
var y = x;
y.foo = 2;

x.foo = 2	<- 이 부분이 이해가 가지 않았다.

원시형 데이터의 경우에는 값이 카피되어 들어가기 때문에 원본에 영향을 주지 않는다.

Boolean Number String Null Undefined

참조 값은 참조 타입의 인스턴스이며. 객체와 같다. 객체는 순서가 없는 프로퍼티로 이루어져 있으며 프로퍼티는 이름과 값의 구성이다.

참조 타입은 할당된 변수에 값을 직접 저장하지 않는다.  object에 저장된 값은 객체 인스턴스가 아니라 객체가 있는 메모리상 위치

가리키는 포인터다.

그러므로 참조하고 있는 주소값이 들어가서 같이 바뀐다.

var myArray = [2, 3, 4, 5];
var ourArray = myArray;
ourArray[2] = 25;
ourArray = undefined;

myArray = [2,3,25,5]

배열주소가 아닌 2번인덱스의 자리 값이 변경된다. ourArray가 undefined로 바뀌었지만 이는 원시값이라 카피만
이루어진다.
var myArray = [2, 3, 4, 5];
function doStuff(arr) {
  arr = [ ];              //   주소값이 새로 생성되는 주소를 바라보는거라서 기존 주소값이
}						  //   myArray의 값을 수정하는 것이 아니고 객체가 생기기에
doStuff(myArray);         //   다른 주소값을 대입해도 myArray 는 원래의 주소값을 보인다.

// 함수 안에서 일어나는 주소값의 변경은 지장을 주지 않는다.

console.log(myArray)   // ==> [2,3,4,5]
var player = { score: 3 };
function doStuff(obj) {
  obj.score = 2;		// 주소의 값을 직접 변경
  obj = undefined;		// 주소는 변하지 않음
}
doStuff(player);

console.log(player.score) // ==> 2

 

Comments