2012-09-30 2 views
2

아래 doStuff 함수의 경우 내부 함수와 같은 이름을 가지고 있더라도 sayHello (dostuff 함수 제외)를 호출 할 수 있습니까? 상기 자바 스크립트 코드 내부 함수와 같은 이름을 가진 외부 함수를 호출하십시오.

var sayHello = function(){ 
    alert("Called from outside the function"); 
} 
function doStuff(){ 
    sayHello(); 
    function sayHello(){ 
     alert("Called from inside the function. How can I call the sayHello function that is outside the scope of doStuff?"); 
    } 
} 
    doStuff(); 
​ 

는 함수의 sayHello (2 개 함수의 이름 임) 밖에되지 함수 내부에서 호출된다.

는 여기가 jsFiddle에 : 외부 함수가 글로벌 경우 http://jsfiddle.net/5MSTU/

답변

3

, 당신은 window 객체의 멤버로 타겟팅 할 수 있습니다.

window.sayHello(); 

그렇지 않으면 다른 이름을 사용해야합니다. 자바 스크립트는 그림자 변수를 허용하므로 외부 변수와 이름이 같은 내부 변수는 외부 변수에 대한 액세스를 효과적으로 비활성화합니다.

+0

스크립팅 환경이 node.js 인 경우에도 마찬가지입니까? –

+0

또는 외부 함수를 가리키는 로컬 변수를 만들고 별칭으로 작동합니다. – Greg

+0

@AndersonGreen : 네, 전역 변수 객체가'window' 대신에'global' 식별자로 참조된다는 점만 빼고요. 'global.sayHello()'. –

-1

는 here--

했다 당신은 앞을 그것을 별칭 수있는 일반 잘못된 코드를 제거 --updated. 그러나 이것이 얼마나 유용한 지 모르겠습니다.

var sayHello = function(){ 
    alert("Called from outside the function"); 
}; 

var aliasForSayHello = sayHello; 

function doStuff() { 
    function sayHello(){ 
     alert("Called from inside the function. How can I call the sayHello function that is outside the scope of doStuff?"); 
     aliasForSayHello(); 
    }  

    sayHello(); 

} 

doStuff(); 

​ 
+0

이것은 함수 외부의 함수 대신 함수 내부의 함수를 호출합니다. 여기 jsfiddle에 있습니다 : http://jsfiddle.net/hTQLW/ –

+2

코드를 테스트하십시오. 기대하는 별칭을 만들지 않습니다. 또한 초기화되기 전에 실제로 내부 함수에 대한 별칭을 호출합니다. * TypeError * –

+1

다음은 인터프리터가 코드를 보는 방식입니다. http://jsfiddle.net/S2qHv/ 선언문이 효과적입니다. 이 예에 표시된 순서대로 재 배열됩니다. –

관련 문제