
246
8장 함수
·
Function()
생성자는 호출될 때마다 함수 바디를 분석하고 새 함수 객체를 생성
합니다. 루프나 자주 호출되는 함수 안에서 생성자를 호출하는 것은 효율적이지
않습니다. 중첩된 함수와 함수 표현식은 루프 안에 있더라도 매번 재컴파일되지
않습니다.
·
마지막으로,
Function()
생성자에서 아주 중요한 포인트는 생성자가 만드는 함
수는 어휘적 스코프를 사용하지 않는다는 점입니다. 생성자가 만드는 함수는 항
상 최상위 함수로 컴파일됩니다.
let scope
=
"global";
function constructFunction() {
let scope
=
"local";
return new Function("return scope"); //
로컬
스코프를
캡처하지
않습니다
.
}
//
이
행이
global
을
반환하는
이유는
Function()
생성자가
반환하는
함수는
로컬
스코프를
//
사용하지
않기
때문입니다
.
constructFunction()() //
=
> "global"
Function()
생성자는 전역 스코프를 사용하는
eval()
(4.12.2절)이고 자신만의 비공
개 스코프에 새 변수와 함수를 정의한다고 생각하면 됩니다. 이 생성자를 사용할
일은 아마 없을 겁니다.
8.8
자바스크립트는 리스프(Lisp)나 ...