2012-11-10 2 views
0

함수 표현 inneroneinnertwo을 사용하여 두 개의 함수를 선언했습니다. 나는 처음에 innerone을 선언하고 그 후에는 innertwo을 선언했습니다. 안에 innerone 나는 innertwo 함수를 호출합니다. 하지만 내 관심사는 innertwoinnerone 다음에 innertwo이 게양되지 않은 함수 표현식을 사용하여 선언한다는 것입니다. 그렇다면 왜이 기능들이이 순서대로 작동합니까? 질서를 바꾸는 것이 필수입니까? 여기함수를 사용하여 함수를 선언하기 전에 함수를 호출하면됩니다. 왜?

코드

var one = function() { 
    var innerone = function() { 
     innertwo(); 
    }, 

    innertwo = function() { 
     console.log('innertwo'); 
    }; 

    return { 
     innerone: innerone 
    }; 
}; 

var o = new one(); 
o.innerone(); 
+3

(전화 할 때'innerone'). 'innertwo = function() .... '전에 직접'innertwo'를 호출하면 에러가 발생합니다. –

+0

그것은 새로운 객체 인스턴스를 생성하고'innerone'이 리턴되면'innertwo'가 이미 존재하기 때문에 작동합니다. 하지만 당신이 모듈 패턴을 사용하고있는 것처럼 보이기 때문에'new '를 사용하지 않아야한다고 생각합니다. 그냥'var o = one()'을 사용하십시오. – elclanrs

+0

왜 처음부터이 작업을 수행합니까? 같은 결과로 끝나는 훨씬 더 명확한 방법이 있습니다. – jfriend00

답변

5

당신이 그것을 호출 할 경우에만 innerone가 호출되기 때문에이 일하고있다. 그리고 그것은 innertwo가 정의 될 때 호출됩니다.

0

이 코드를 작성하는 더 간단한 방법에 대한 의견을 물어 봤으므로 여기에 몇 가지 간단한 방법이 있습니다. 첫 번째 함수는 여전히 구조체를 반환하고 new없이 함수로 호출 할 수 있습니다. 두 번째는 함수 객체에 속성을 추가하지만 여전히 private 함수 innertwo()을 유지합니다. 두 번째 옵션은 나에게 가장 깨끗해 보입니다.

옵션 1 :

function one() { 
    function innertwo() { 
     console.log('innertwo'); 
    } 

    return { 
     innerone: function() { 
      innertwo(); 
     } 
    }; 
} 

var o = one(); // new is not needed here 
o.innerone(); 

옵션 2 :

당신이이 정의 된 후 innertwo``호출하기 때문에 의미가 있습니다
function one() { 
    function innertwo() { 
     console.log('innertwo'); 
    } 

    this.innerone = function() { 
     innertwo(); 
    }; 
}; 


var o = new one(); 
o.innerone(); 
관련 문제