function fun
개체의 방법을 만들지 않고 아래 내용이 가능한지 알려주십시오.JavaScript에서 문자열 형식으로 사용할 수있는 이름을 사용하여 다른 함수의 범위 내에서 선언 된 함수를 호출하는 방법이 있습니까?
(function a() {
var fun = function() {
console.log('abc');
}
var x = 'fun';
// call fun using x (How ?)
})();
function fun
개체의 방법을 만들지 않고 아래 내용이 가능한지 알려주십시오.JavaScript에서 문자열 형식으로 사용할 수있는 이름을 사용하여 다른 함수의 범위 내에서 선언 된 함수를 호출하는 방법이 있습니까?
(function a() {
var fun = function() {
console.log('abc');
}
var x = 'fun';
// call fun using x (How ?)
})();
eval
을 사용할 수 있습니다. 문자열을 JavaScript 코드로 평가합니다.
동일한 함수가 아니며 복사본이지만 동일한 클로저 (함수 내에 함수가있는 이유)가 없으므로 동일한 데이터에 액세스 할 수 없으므로 해당 동작이 일치하지 않습니다. – Blindman67
@ Blindman67 그게 무슨 소리 죠? 아무것도 여기에 복사되지 않습니다. 'eval (x)()'는'fun()'와 같은 동작을합니다. – Bergi
@Bergi 나는 그 대답이 그 질문을위한 것이라고 생각한다. "둘러싸는 함수 밖의 함수에 액세스하십시오."그리고이 스 니펫은이 답이 의미하는 바가 아니므로, 평가가있는 함수에 이미 액세스 할 수 있기 때문에 무의미합니다. – Blindman67
(function a() {
var fun = function() {
console.log('abc');
}
var x = 'fun';
eval(x)();
})();
windows.x = function(){
// do something here
}
과 :
windows["x"]()
그것은 본질적으로 OP의 (어떤 이유로 든) 피할 수있는 객체의 메소드입니다. 물론 객체를 사용하는 것이 적절한 방법이지만, 전역 변수를 사용하는 것은 정말 잘못입니다. – Bergi
항상있다'eval'을
그래서 내 경우에는,이 같은 창에 전역 변수를 기능을 설정할 수 있습니다. 그러나 이것을 결코 사용해서는 안됩니다. 왜 당신은 이것을하려고합니까, 당신의 실제 문제는 무엇입니까 (https://meta.stackexchange.com/q/66377)? – Bergi