본문 바로가기

TIL

코어자바스크립트 chapter 4 예상 질문 정리


👉콜백함수란? 

콜백함수는 다른 코드의 인자로 넘겨주는 함수

제어권도 함께 넘겨줌. 콜백함수 위임받은 함수는 자체적 내부 로직에 의해 콜백함수를 적절한 시점에 실행하게 됨

 

var count =0; 
var timer = setInterval(function () {
  console.log(count);
  if (++count > 4) clearInterval(timer);
}, 300);

 

 

콜백함수 예제

 

Array.prototype.map = function (callback, thisArg) {
    var mappedArr = [];
    for (var i = 0; i < this.length; i ++ ) {
    	var mappedValue = callback.call(thisArg || window, this[i], i, this);
        mappedArr[i] = mappedValue;
    }
    return mappedArr;
}

 

 

메서드를 콜백 함수로 전달한 경우 

 

var obj = {
    vals: [1, 2, 3], 
    logValues: function (v, i) {
    	console.log(this, v, i);
    }
};
obj.logValues(1, 2); //(1)
[4, 5, 6].forEach(obj.logValues); //(2)

 

(1)은 메서드로서 호출함

(2)는 forEach의 콜백함수에 함수로서 전달함(호출이 아니라 전달)

 

👉 동기 코드와 비동기 코드의 차이점 

동기 코드 : 현재 실행중인 코드가 완료된 후에야 다음으로 넘어가게 하는 것

비동기 코드: 현재 실행중인 코드가 완료되지 않아도 다음으로 넘어가는 것

 

 

프로미스 

👉제너레이터

제너레이터란? 

코드블록의 실행을 일시중지 했다가 필요한 시점에 재개할 수 있는 특수 함수

 

👉일반함수와 제너레이터의 차이 

1. 제너레이터 함수는 함수호출자에게 함수실행의 제어권을 양도할 수 있다. 

    함수 호출자가 실행을 중지나 재개할 수 있다. (일반 함수는 제어권을 독점)

2. 제너레이터 함수는 함수 호출자와 함수의 상태를 주고받을 수 있다. 

    함수 호출자와 양방향으로 함수의 상태를 주고 받는다. 

3. 제너레이터 함수를 호출하면 제너레이터 객체를 반환한다. 

    함수를 호출하면 이터러블이면서 동시에 이터레이터인 제너레이터 객체를 반환한다.

    제너레이터 객체는 next메서드를 가지는 이터레이터

    

 

👉제너레이터의 작동방식

제너레이터 함수를 호출하면 제너레이터 객체를 반환한다. 

 

function* getFunc()	{
    yield 1;
    yield 2;
    yield 3;
}

const generator = genFunc();
console.log('next' in generator) //true

 

next 메서드를 호출하면

yield다음의 값을 value,

done의 프로퍼티 값은 false

 

return 메서드를 호출하면 

yield다음 값을 value, 

done의 프로퍼티 값은 true

 

throw 메서드를 호출하면

인수로 전달받은 에러를 발생 

undefined를 value프로퍼티 

true를 done프로퍼티 값

 

function* genFunc() {
  try {
    yield 1;
    yield 2;
    yield 3;
  } catch (e) {
  	console.error(e);
  }
}

const generator = genFunc();

console.log(generator.next()); // {value: 1, done: false}
console.log(generator.return('End!'); // {value: 'End!', done: true}
console.log(generator.throw('Error'); // {Value: undefined, done: true}

 

 

👉이터레이터란?

 

 

 

 

제너레이터를 실행하면 iterator가 반환됨 

iterator는 next라는 메서드를 가지고 있음 

next메서드를 호출하면 generator함수 내부에서 가장 먼저 등장하는 yield에서 함수의 실행을 멈춤

'TIL' 카테고리의 다른 글