728x90
728x90

eval()은 문자열을 코드로 인식하게 하는 함수입니다. 
ES5부터는 지역범위가 아니라 전역 범위에서 동작합니다. ** 즉 함수를 선언하면 전역함수가 되고, 실행 코드는 실행되는 위치의 지역 범위에 접근할 수 없습니다.

 

eval()

 

인자가 하나 이상의 JS 명령문을 나타낸다면 실행합니다.
인자가 문자열이 아니면 인자 그대로 반환합니다.
값이 없으면 undefined를 반환합니다.

eval 함수는 eval('2+2') 이런식으로 사용합니다. 

 

var jb = '2+2';
			document.write( '<p>' + jb + '</p>' );
			document.write( '<p>' + eval( jb ) + '</p>' );
// 2+2
// 4

 

동적인 프로퍼티에 접근하려고 사용한다면 대괄호 표기법으로 대체할 수 있습니다. (출처) eval()은 Ajax 요청으로 받아온 JSON 응답을 다룰 때 이런 안티 패턴이 나오기도 하는데요.

 

// 안티 패턴 
var property = 'name'; 
console.log(eval('obj.' + property)); 

// 권장 패턴 
var property = 'name'; 
console.log(obj[property]);

 


보안과 유효성을 보장하기 위해서 브라우저의 내장 메서드를 사용해서 JSON 응답을 파싱하는 것이 좋습니다.
즉 JSON.parse()를 사용하는 것인데 미지원 브라우저에서는 JSON.org 의 라이브러리를 사용할 수 있습니다.

 

// 참고: 실행 가능한 모든 예시에 'use strict'가 적용되어있습니다.

eval("let x = 5; function f() {}");

alert(typeof x); // undefined (없는 변수)
// 함수 f도 읽을 수 없음

 

엄격 모드에서 eval은 자체 렉시컬 환경을 갖고 있어서 eval 내부에 선언된 함수와 변수는 외부에서 읽을 수 없습니다.
use strict가 적용되어 있지 않은 경우엔 eval은 자체 렉시컬 환경을 갖지 않기 때문에 외부에 있는 x f를 읽을 수 있습니다. (출처)

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v