본문 바로가기
JavaScript

JavaScript기초(18)_함수(4)

by DeBanker.K 2021. 10. 12.

1. const hello = new Function();

Function 안에는 각 인자들과 함수의 바디를 아래와 같이 넣을 수 있다.

// new Function( /* 인자1, 인자2, ... , 함수의 바디 */);
const sum = new Function('a', 'b', 'c', 'return a + b + c');
console.log(sum(1,2,3));
[Running]
6

 

인자의 인식 범위에 대하여 다음과 같은 코드들을 통해 알 수 있다.

{
    const a = 1;
    const test = new Function('return a');
    console.log(test());
}
[Running]
return a
^
ReferenceError: a is not defined

변수 a가 정의되지 않았다는 에러가 발생한다. 1로 선언된 지역변수 a를 인식하지 않는다. 그렇다면 어떻게 해결할 수 있을까?

 

global.a = 0;
{
    const a = 1;
    const test = new Function('return a');
    console.log(test());
}
[Running]
0

위와 같이 글로벌 전역 변수 a를 선언하면 그것을 그대로 인식하여 출력함을 알 수 있다.

 

변수에 할당하는 함수와 다음과 같이 비교할 수 있다. 

global.a = 0;
{
    const a = 1;
    const test = new Function('return a');
    console.log(test());
}// 중괄호안에서만 변수의 범위가 적용된다.
{
    const a = 2; 
    const test = function(){
        return a;
    };
    console.log(test());
}// 중괄호안에서만 변수의 범위가 적용된다.
[Running]
0
2

변수로 할당한 함수 같은 경우에는 정상적으로 상위에 선언된 a를 참조하여 출력함을 알 수 있다.

전역 변수의 값을 쓰고자 하면 생성자 함수 표현식을 쓸 수 있겠으나, 일반적은 상황에서는 잘 쓰이지 않는다.

 

'JavaScript' 카테고리의 다른 글

JavaScript기초(20)_함수(6)  (0) 2021.10.14
JavaScript기초(19)_함수(5)  (0) 2021.10.13
JavaScript기초(17)_함수(3)  (0) 2021.10.11
JavaScript기초(16)_함수(2)  (0) 2021.10.10
JavaScript기초(15)_함수(1)  (0) 2021.10.09

댓글