2012-02-03 3 views
2

javascript에는 버튼 클릭 이벤트와 같은 무언가를위한 메소드를 설정하는 여러 가지 방법이 있습니다. 예를 들어javascript에서 익명 메소드의 장점과 단점은 무엇입니까?

는 물론 같은 캡슐화로 더 확실한 답변 중 일부 원하는 경우가 있습니다 당신이 입력 요소 '버튼'

function MyForm(){ 
    //anonymous method 
    button.click = function(){ //work }; 


    //private method 
    var handleClick = function() { // work }; 
    button.click = handleClick; 

    //public method 
    button.click = outerClickHandle; 


} 

//public 
function outerClickHandle(){ 
    // work 
} 

//prototype 
MyForm.prototype.outerClickProto(){ 
    //work 
} 

을 입수해온했다고 밝혔습니다. 그리고 프로토 타입을 사용할 때마다 매번 성능에 좋은 기능을 재 작성할 필요가 없지만 좋은 방법이나 스크립트 작성의 흐름 이외에 익명의 방법은 무엇이 좋고 나쁘습니까?

답변

2

내가 발견 한 주요 이점은 인라인으로 선언 되었기 때문에 익명의 함수가 범위 내의 모든 현재 로컬 변수에 액세스 할 수있어 일부 상황에서 코드를 크게 단순화 할 수 있다는 것입니다. 전형적인 예는 setTimeout()으로 위의 범위에서 정의 된 변수를 사용하여 작동하게하려는 경우입니다.

익명 함수는 이름이 필요 없기 때문에 네임 스페이스 (전역, 함수 내 로컬 ... 등)를 방해하지 않습니다.

익명 함수를 addEventListener (type, fn) 이벤트 핸들러와 함께 사용하면 단점은 함수에 대한 핸들이 없으므로 이벤트 리스너 만 제거 할 수 없다는 것입니다.

+0

네임 스페이스에 대한 아주 좋은 점은 앞으로 계속 나아갈 것임을 명심하십시오. – tam

+1

익명 함수의 또 다른 단점은 함수를 사용하는 코드가 실행될 때마다 새로운 함수가 작성된다는 점입니다. 어떤 경우에는 전혀 차이가 없지만 다른 경우에는 성능상의 이유로 고려해야 할 사항 일 수 있습니다 (예 : 루프에서). – nnnnnn

+1

함수에 의해 소비 된 메모리와 관련 클로저가 중요해질 수 있기 때문에 위의 대답을 편집하여 nnnnnn 커미션을 포함하도록 권장합니다. 익명 및 비공개 메서드는 각각 하나의 객체와 하나의 실행 환경 (클로저)을 패턴으로 나타냅니다. 공용 메소드는 함수 오브젝트를 작성하지 않고 public 함수 용으로 작성된 함수 오브젝트를 사용합니다. MyForm을 한 번 호출하면 차이가 나타나지 않으며 10,000 번 전화하면 분명히 알 수 있습니다. – chuckj

관련 문제