2017-10-13 13 views
1

function fun 개체의 방법을 만들지 않고 아래 내용이 가능한지 알려주십시오.JavaScript에서 문자열 형식으로 사용할 수있는 이름을 사용하여 다른 함수의 범위 내에서 선언 된 함수를 호출하는 방법이 있습니까?

(function a() { 
var fun = function() { 
console.log('abc'); 
} 
var x = 'fun'; 
// call fun using x (How ?) 
})(); 
+0

항상있다'eval'을

그래서 내 경우에는,이 같은 창에 전역 변수를 기능을 설정할 수 있습니다. 그러나 이것을 결코 사용해서는 안됩니다. 왜 당신은 이것을하려고합니까, 당신의 실제 문제는 무엇입니까 (https://meta.stackexchange.com/q/66377)? – Bergi

답변

0

eval을 사용할 수 있습니다. 문자열을 JavaScript 코드로 평가합니다.

+0

동일한 함수가 아니며 복사본이지만 동일한 클로저 (함수 내에 함수가있는 이유)가 없으므로 동일한 데이터에 액세스 할 수 없으므로 해당 동작이 일치하지 않습니다. – Blindman67

+0

@ Blindman67 그게 무슨 소리 죠? 아무것도 여기에 복사되지 않습니다. 'eval (x)()'는'fun()'와 같은 동작을합니다. – Bergi

+0

@Bergi 나는 그 대답이 그 질문을위한 것이라고 생각한다. "둘러싸는 함수 밖의 함수에 액세스하십시오."그리고이 스 니펫은이 답이 의미하는 바가 아니므로, 평가가있는 함수에 이미 액세스 할 수 있기 때문에 무의미합니다. – Blindman67

-1

(function a() { 
 
var fun = function() { 
 
console.log('abc'); 
 
} 
 
var x = 'fun'; 
 

 
eval(x)(); 
 
})();

나는 항상 또한 당신이 평가 후면 사용하는 경우 일부 브라우저가 경고를 던졌습니다 기억, 평가 사용하는 대신 내 기능을 실행 창 변수를 사용하는 것을 선호합니다. 또한 Chrome 확장 프로그램은 기본적으로 사용하도록 설정되지 않습니다. 이런 식으로 실행 한 후

windows.x = function(){ 
    // do something here 
} 

과 :

windows["x"]() 
+0

그것은 본질적으로 OP의 (어떤 이유로 든) 피할 수있는 객체의 메소드입니다. 물론 객체를 사용하는 것이 적절한 방법이지만, 전역 변수를 사용하는 것은 정말 잘못입니다. – Bergi