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
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'); // -------- 다른 방식으로 간접 호출
}
속성 값 접근
// eval을 사용한 코드
var obj = { a: 20, b: 30 };
var propname = getPropName(); // "a" 또는 "b"를 반환
eval( "var result = obj." + propname );
// eval을 사용하지 않은 코드
var obj = { a: 20, b: 30 };
var propname = getPropName(); // "a" 또는 "b"를 반환
var result = obj[ propname ]; // obj[ "a" ]는 obj.a와 동일함
코드 수행
setTimeout(" ... ", 1000) // 코드를 문자열로 넘김
setTimeout(function() { ... }, 1000); // 함수로 작성해서 넘김
elt.setAttribute("onclick", "...") // 코드를 문자열로 넘김
elt.addEventListener("click", function() { ... } , false); // 함수로 작성해서 넘김
옛날에 json같은것들 받을때 쓰이더라고요 보안성때문에 안쓰지만