new Function

JY KIM·2020년 7월 11일
0

vanilla javascript

목록 보기
8/8

함수를 만드는 방법 한가지 더!

new Function([arg1, arg2, ...argN], functionBody);

Function라는 함수 객체도 존재한다.
이렇게 new키워드와 같이 사용하면 함수를 만들 수 있다.

그럼 어떤 차이가 있을까?

Function은 매개변수로 받은 문자열을 사용해 함수를 만드는데,

마지막 매개변수의 경우는 함수 바디로 해석한다.

const sample = new Function('a', 'b', 'return a+b');

sample(1, 4); // 5

문자열 을 함수의 매개변수바디로 바꿔준다.

이를 이용하면 함수를 동적으로 만들수도 있고, 실행하는 것도 가능하다.


클로저

함수는 특별한 프로퍼티 [[Environment]]에 저장된 정보를 이용해 자기 자신이 태어난 곳을 기억한다.

[[Environment]]는 함수가 만들어진 렉시컬 환경을 참조하는데,

new Function

를 이용ㅎㅐ 만든 함수는 만들어진 곳의 렉시컬 환경이 아닌 전역 렉시컬 환경을 참조하게 된다.

이 이야기는 new Function을 이용해 만든 함수는 외부 변수에 접근이 불가능하고, 오직 전역 변수에만 접근할 수 있다.

왜냐면?

new Function으로 만든 함수는 시점이 무작위이다. 언제 선언이 되고 언제 쓰는지 모른다. 하지만 그래도 이런 new Function으로 선언된 함수는 기존 스크립트와 문제없이 상호작용 할 수 있어야 한다.

profile
알파카머리닮음

0개의 댓글