프로그래머스를 풀던 와중 문자열로된 식을 계산하는 문제가 있었다.

아래 문제와 같이 eval()함수를 사용하여 풀었는데,

const binomial = "40000 * 40000";

function solution(binomial) {
  return eval(binomial);
}

console.log(solution(binomial));

eval함수에 대해서 자세히 알아보려고 구글링을 하였는데,

사용하면 안된다는 글을 보아서 정리했다.

Untitled

eval() is evil이라는 말인데, 정리해보려 한다.

정의

eval(string)

기본 사용 예제

console.log(eval('2 + 2'));
// expected output: 4

console.log(eval(new String('2 + 2')));
// expected output: 2 + 2

console.log(eval('2 + 2') === eval('4'));
// expected output: true

console.log(eval('2 + 2') === eval(new String('2 + 2')));
// expected output: false

직접 호출 vs 간접 호출

function test() {
  var x = 2, y = 4;
  console.log(eval('x + y')); //  직접 호출, 지역 범위 사용, 결과값은 6
  var geval = eval; // ---------- eval을 전역 범위로 호출하는 것과 같음
  console.log(geval('x + y')); // 간접 호출, 전역 범위 사용, `x`가 정의되지 않았으므로 ReferenceError 발생
  (0, eval)('x + y'); // -------- 다른 방식으로 간접 호출
}