2012-07-13 4 views
1

자바 스크립트에서 ExecuteGlobal의 대안이 있습니까?JavaScript에 VBScript의 ExecuteGlobal과 동일한 기능이 있습니까?

Function vbExecuteGlobal(parmSCRIPT) 
    ExecuteGlobal(parmSCRIPT) 
End Function 

DevGuru는 [문 설명]을 :

ExecuteGlobal 문은 하나의 문자열 인수를 취하는 VBScript를 문 또는 문장의 순서로 해석하고, 글로벌 네임 스페이스에 다음 문을 실행합니다.

+2

무언가가 문자열을 코드로 실행하면 해결책은 리팩토링하여 해결하지 못하게하는 것입니다. 문자열에 코드를 보관하면 안됩니다. – Quentin

+0

당신은'setTimeout (code, 0)'을 사용할 수 있었지만 정말 필요할까요? 나는 쿠엔틴에 동의한다. –

+0

@FelixKling - (끔찍한 경고와 함께) 제안 할 것이지만, 대부분의 JS 엔진에는 최소 시간 제한이 있으며 코드를 비동기 적으로 평가합니다. – Quentin

답변

1

VBScript의 [전역] 실행은 eval()과 동일한 자바 스크립트입니다. 전달 된 코드는 호출 컨텍스트에서 평가됩니다.

는 참조 here for details, pros and cons

UPDATE

같은 방법을 추천하지만, 동등성에 대한 이해 명확히하지 않음 :

// calling eval in global context is the exact equivalent of ExecuteGlobal 
eval("function f0() {print('f0(): yes, we can!');}"); 
f0(); 

// calling eval in locally is the exact equivalent of Execute 
function eval00() { 
    eval("function f1() {print('f1(): no, we can not!');}"); 
    f1(); 
} 
eval00(); 
try { 
    f1(); 
} 
catch(e) { 
    print("** error:", e.message); 
} 

// dirty trick to affect global from local context 
function eval01() { 
    eval("f2 = function() {print('f2(): yes, we can use dirty tricks!');}"); 
    f2(); 
} 
eval01(); 
f2(); 

출력 : 그래서

js> load("EvalDemo.js") 
f0(): yes, we can! 
f1(): no, we can not! 
** error: "f1" is not defined. 
f2(): yes, we can use dirty tricks! 
f2(): yes, we can use dirty tricks! 

: 문제 VBScript에서 Execute [Global]를 사용하여 해결할 수있는 항목은 Javascript에서 eval()을 사용하여 해결할 수 있습니다. 일부 문제는 추가 작업이나 트릭이 필요할 수 있습니다.

Abhishek이 명시 적으로 "나는 자바 스크립트에서 자바 스크립트를 평가하고 싶다"고 말했기 때문에 나는 내 대답을 정당화 할 필요가 없다고 느낍니다.

+1

당신의 답변에 (당신이 그것이 아니라는 것을 알고 있어야합니다 그래서 당신이 글로벌 통화가 아닌)의 컨텍스트에서 평가라고 말할 . 왜 대답입니까? – Esailija

관련 문제