2012-03-26 1 views
0

전역 함수로 자바 스크립트의 기능 또한함수() {여기에 몇 가지 코드}입니다 전화 나 자바 스크립트의 주요 기능이

같은
function a() { 

    function b() { 

     // some code here 
    } 

} 

보이는이 주요 기능의 자식 기능이 이제 함수 b를 직접 호출하려고합니다. 그때 어떻게하는지.

+0

함수를 선언하는 함수. 얼마나 비뚤어진!;) b()를 잘라내어 붙여 넣기 (a) (전역 스크립트 수준, 따라서 전역 가시성)와 동일한 수준으로 가져 오지 못했습니까? –

답변

1

명시 적으로 같은 전역 객체에 b 노출을 시도 할 수 이 :

function a() { 

    function b() { 

     // some code here 
    } 

    window.exposed = b; 
} 
+0

그리고 호스트 환경에 윈도우 객체가 없다면? – RobG

0

는 당신은 할 수 없도록

function b() { 
some code here 
} 

function a() { 
b(); 
} 
+0

이것은 명백한 대답이지만 'b'에서 'a'의 지역민에 액세스하는 방법 즉, 클로저를 동일하게 만들기 위해 'a'의 지역 주민을 끌어 올리는 방법에 대한 설명이 없습니다. –

+0

왜 코드를 올바르게 코딩하지 않는가? 전 세계로 전화하십시오. – user1289347

3

처럼 전화 기능 A의 내부 기능 B를 선언하지 마십시오. 좋아

function a() { 

    this.b = function() { 

     some code here 
    } 
} 

그리고 그것을 호출 : 다음

var a = { 
    b: function() 
    { 
     //some code here 
    } 
}; 

그리고 단지 말 :

var x = new a(); 
a.b(); 

당신은 또한 당신의 기능을 가진 객체 리터럴을 만들 수 있습니다 당신은, 그러나 뭔가를 할 수 있습니다 :

a.b(); 

당신은 또한 함수 개체 자체의 속성을 만들고, 그런 식으로 액세스 할 수 있습니다 :

function a() 
{ 
}; 

a.b = function() 
{ 
    //Some code here 
}; 

을 그리고 그것을 호출

a.b(); 
0

많은 솔루션이 여기에있다는 단 하나 나는 그것이 자명 한 일 입니처럼 보이는, 그래서 그 뜻에 맞게 글로벌 객체에 기능을 부착하는 생각 ared 기능.

function a() { 

    // Protect against ES5 strict mode, assume function is called as global code 
    if (typeof this !== undefined) { 
    this.b = function() { /* whatever */ }; 
    } 
} 

혹은 당신의 코딩 스타일 나은 다음 정장 :

a(); 

:

function a() { 

    function b() { /* whatever */}; 

    if (typeof this !== undefined) { 
    this.b = b; 
    } 
} 

는 단순히 호출 유일한 차이점은 a이 실행될 때까지 사용할 수 없습니다 것입니다 ES3 또는 ES5 비 엄격 모드에서 예상대로 작동합니다. (가) 위의이가 정의되어 있지 않다고의 결과 곳 ES5에게 엄격한 한계를 극복하기 위해, 글로벌 코드로 를 호출 설정된 명시 적으로 :

a.call(this); 

또는 전역 객체에 대한 몇 가지 다른 적절한 참조

.

그 이외의 브라우저 호스트 가능성이 객체가되지 않습니다하지 적어도 때문에, 신뢰성이 떨어지는이기 때문에 내가 를 사용하여 멀리 머물렀던.

관련 문제