2012-05-23 3 views
2

은 일부 JS 코드의 성능에 작업이었고,이 방법 보았다객체에 함수 이름을 선언합니다. 이유는 무엇입니까?

window.sample = { 

    foo: function foo(a,b){ 
     // code goes here 
    } 

    bar: function bar(a,b){ 
     // code goes here 
    } 

} 

당신이 단어를 "기능"후 함수 이름을 감속 왜 어떤 이유가 있습니까?

복용량 디버깅에 도움이 되나요?

좋은지 나쁜지 아니면 불필요한가요?

+2

감속 ....? – JJJ

+1

아, 당신이 의미하는 ** ** 신고 – Joseph

+0

@JosephtheDreamer 오, 맞아. ("코드 성능"컨텍스트는 빨간색 청어입니다.) – JJJ

답변

1

대신 foo 및 bar 속성에 익명의 함수를 할당하면 명명 된 함수가 할당됩니다.

가 디버깅에 도움이 될 수 있습니다 :이 만드는 유일한 차이점은, 내가 알고있는 것을, 당신은 함수의 이름 대신 "자바 스크립트 익명 함수"의 호출 스택

+0

console.log (샘플)를 실행하는 것으로 충분하지 않습니다. 그때? – Endless

+0

@Endless @jbabey는 오류가 발생하는 동안 스택 추적을 의미한다고 생각합니다. 이름이 없으면 콘솔은 이름이 없으므로 '익명 함수'와 같은 것을 말합니다. – Joseph

+0

@Joseph 아, 이해합니다. – Endless

4

에 표시 볼 것입니다 유일한 이유는 당신이 개체에 대한 참조없이 함수 내에서 함수 자체를 사용할 수있는 것 :

foo: function foo(a,b){ 
    return a > 0 ? a + foo(a-1,b) : b; 
} 
당신이 정말로 그것을를 사용하지 않아야 있도록라는 이름의 함수 리터럴에 대한 지원을

참고 howeever는, 브라우저에서하지 일치 .

0

이라는 이름의 함수 식입니다. 함수의 이름은 함수 자체의 변수로만 사용할 수 있습니다. 이것은 예를 들어, 재귀 유용 할 수 있습니다 :

함수의 이름도 디버깅 또는 검사 스택 추적하면서 기능을 식별 할 수있는 기능의 표준이 아닌 name 특성을 통해 대부분의 브라우저에서 사용할 수

var obj = { 
    foo: function foo(node) { 
     // Do something to node 

     var childNode = node.firstChild; 
     while (childNode) { 
      foo(childNode); 
      childNode = childNode.nextSibling; 
     } 
    } 
}; 
.

IE < 9에는 결함이 있으므로 구현시주의를 기울여야합니다. 자세한 내용은 Juriy Zaytsev's excellent article on the subject에서 확인할 수 있습니다.

관련 문제