2010-06-16 1 views
2

아래 시나리오에서 eval()이 선언 된 변수에 대한 참조를 어떻게 얻을 수 있습니까?JavaScript에서 eval() 중에 작성한 로컬 변수에 대한 참조 얻기

참고 사항 : 평가되는 JavaScript는 신뢰할 수있는 출처에서 나왔습니다.

+0

당신이 평가'에 전달하는 것을 그 코드에 영향을 줄 수있는 능력이 있는가()'처럼 보인다? 다른 말로하면이 코드를 변경하여이 작업을 수행 할 수 있습니까? 아니면 다른 소스에서 온 코드로 인해 변경 될 수 있습니까? – Pointy

+0

코드를 변경할 수 있습니다. 너는 무엇을 제안 하는가? – dpq

+1

코드를 * 명시 적으로 * 예측 가능한 이름을 가진 객체로 선언 한 다음 그 객체 내에 다른 (예측할 수없는) 속성을 넣으면 (@ tomalak의 대답 참조), 그 것을 사용할 수 있습니다. 그러나'eval()'은 새로운 스코프를 만들지 않으며, 내가 아는 한 당신이 객체처럼 취급 할 수있는 방식으로 로컬 "클로저"스코프에 대한 참조를 얻을 수있는 방법이 없습니다. – Pointy

답변

2

평가는() 호출자와 동일한 범위에서 실행되므로이 ​​작동합니다 :

function test() { 
    eval("var myVariable = 5"); 
    var locals = {}; 
    locals.myVariable = myVariable; // TODO What should we do here? 
    alert(locals["myVariable"]); // returns myVariable 
} 

그러나 만약 당신이 원하는 경우 (평가 후면() 호출에 선언 된 어떤 변수를 확인할 수 없습니다)

1
function test() { 
    eval("var locals = {myVariable: 5};"); 
    alert(locals["myVariable"]); 
} 

나를 위해 작동합니다. eval()은 새 범위를 만들지 않습니다.

+0

나는 그 변수들의 이름을 미리 모른다는 것을 지적했다. – dpq

1

로 간단한 :

eval("var myVariable = 5"); 
//no magic is needed 
alert(myVariable); // returns myVariable 
+1

변수의 이름을 모르는 경우 어떻게해야합니까? 나는. 나는 그들의 이름을 먼저 알아야한다. – dpq