포도가게의 개발일지

[Java Script]생성자 함수, Closure, generator 본문

[JS,TS,Node]

[Java Script]생성자 함수, Closure, generator

grape.store 2022. 2. 8. 23:12
반응형

생성자 함수

// 함수가 new를 만나면
// 생성자 함수 동작원리

function User(name,age){
	// this라는 객체 생성
	this = {};
    
    this.name = name;
    this.age = age;
    
    // return 추가
    return this;
}

 

Closure

  • 코드가 실행될 때 전역 렉시컬 환경이 생성됨
  • 또한, 함수가 실행될때 내부 렉시컬 환경이 생성된다. 
  • 함수가 생성될 당시 외부 함수에 변수를 기억하기 때문에 외부함수가 소멸 되었다 하더라도 내부함수는 외부함수에 변수에 접근 할 수 있다. 변수를 참조 할 때는 내부에서 점점 외부를 참조하게되고 마지막으로 전역 렉시컬을 참조한다.
function Adder(x){
	return function(y){
    	return x+y;
    }
}

// 서로 다른 렉시컬 환경을 가지고 있기 때문에
// 각각의 변수 x에는 3,10이 y에는 2,2가 들어있다.

const add3 = Adder(3);
console.log(add3(2)); // 5

const add10 = Adder(10);
console.log(add10(2)); // 12

generator

  • 함수의 실행을 중간에 멈췄다고 다시 재개하는 기능
  • function*(){} function 옆에 *을 달아준다.
  • yield 키워드를 사용한다. yield에서 함수의 실행을 멈출 수 있다.
  • iterable 반복이 가능한, mutable 변하기 쉬운, immutable 변할수 없는
  • iterable객체는 symbol.iterator메소드가 있어야한다. iterator는 next메서드를 가진다.
  • arr도 iterable하기때문에 next로 하나씩 실행할 수 있다.
function* fn(){
	console.log(1);
    yield 1;
    console.log(2);
    console.log(3);
    yield 2;
    console.log(4);
    console.log(5);
    yield 3;
    return "finish";
}

const a = fn(); // 제너레이터 객체를 반환
/*
a.next(); yield 1을 만날때까지 실행 후 멈춤 // 1 출력 : {value:1, done:false}
a.next(); yield 2를 만날때까지 실행 후 멈춤 // 2,3 출력 : {value:2, done:false}

*/

// 인자삽입
function* fn(){
	const num = yield "인자입력하시오";
    console.log(num);
    return "finish";
}

const a = fn();
a.next(10); // 10 출력

'[JS,TS,Node]' 카테고리의 다른 글

[Js] 고급 문법  (0) 2022.03.02
[Node] 작동 원리  (0) 2022.02.09
[Java Script]호이스팅, 함수 선언문 vs 함수 표현식, this, Promise  (0) 2022.02.04
[Java Script] V8엔진 빌드과정  (0) 2022.02.04
Call stack && Event loop  (0) 2021.12.30
Comments