본문 바로가기

javascript

평가 표현식

전역함수 eval()


문자열을 자바스크립트 코드로 해석하고 이를 평가한 결과를 값으로 출력합니다.





문자열 소스 코드를 동적으로 평가하는 기능은 매우 강력하지만 실제로는 거의 사용되지 않는다고 합니다.

그리고 eval을 사용하면 eval( )이 평가하는 코드를 분석할 수 없어 자바스크립트 인터프리터가 미리 최적화를 할 수 없다고 합니다.


eval()함수는 단 하나의 전달인자를 갖습니다.


전달인자로 문자열이 아닌 값을 전달하면 단순히 넘긴 값을 반환합니다.





전달인자로 문자열을 전달하면 문자열을 자바스클립트 코드로 해석합니다. 이때 해석하지 못하면 SyntaxError가 발생합니다.





전달인자로 넘긴 문자열이 자바스크립트 코드로 올바르게 해석될 경우에는, 코드를 평가한 다음에 코드에 포함된 마지막 표현식 또는 구문의 값을 반환합니다. 값이 없을 경우에는 undefined 값을 반환합니다.





eval() 함수는 eval()이 호출되는 시점의 코드의 변수 환경을 사용합니다.

실행 시점의 함수 범위(scope)에서 실행되고, this 또한 실행 시점의 context의 this를 가리킵니다.


  • 전역 scope, context가 window 객체




  • 지역 scope





  • context가 window가 아닐 경우 ( 예제에서 context는 Person )



eval()를 사용하면 선언된 지역 변수를 읽거나 변경, 새로운 지역 변수나 함수를 정의할 수도 있습니다.

ECMCScript 5의 엄격모드에서는 기존 선언된 지역 변수 값을 읽거나 설정할 수는 있지만 새롭게 정의할 수는 없다고 합니다.

뿐만 아니라, 엄격 모드는 "eval"을 거의 예약어로 만들어서 eval()을 더 연산자 처럼 만든다고합니다. 따라서 eval()을 새 값으로 덮어쓸 수도 없습니다. 



* eval()은 디버깅, 보안, 성능 등에서 문제를 일으킬 수 있어 되도록 지양하는 것이 좋다고 합니다.


'javascript' 카테고리의 다른 글

함수 전달인자와 매개변수  (0) 2017.04.13
기타 연산자들  (0) 2017.03.12
변수 선언  (0) 2017.02.21
기본 표현식  (0) 2016.12.22
변수의 유효범위  (0) 2016.12.20