2010-07-13 4 views
4

가능한 중복 :
Javascript: var functionName = function() {} vs function functionName() {}JavaScript에서 함수를 정의하는 두 가지 방법의 차이점은 무엇입니까?

방법 1 :

function fancy_function(){ 
    // Fancy stuff happening here 
} 

방법 2 : 나는 '때

var fancy_function = function(){ 
    // Fancy stuff happening here, too. 
} 

나는 전자를 사용 그냥 한 번 또는 여러 번 사용하는 일반 함수를 정의하고 후자는 다른 함수를 콜백으로 전달할 때 사용하지만 두 가지 방법으로 모두 잘 작동하는 것처럼 보입니다.

실제로 어떤 점에서 차이가 있습니까?

+1

정말 여기 여러 번 답변을 받았습니다. Google 또는 stackoverflow에서 검색하십시오. – Anurag

+2

http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname 및 http://stackoverflow.com/questions/1925976/declaring-functions-in-javascript-closed – Anurag

+0

감사합니다. 너, @Anurag. 이미 이것을 닫는 대답을 선택합니다. 나는 앞으로 더 조심 스러울 것이다. –

답변

2

함수 자체에는 차이가 없지만 함수에 대한 참조가 있으므로 유연성이 뛰어나며 덮어 쓰면 작동 방식이 다릅니다.

이렇게하면 후자와 함께 행동을 취할 수 있습니다. 그런 다음 트릭을 "재정의"기존 함수 다음 "기본"을 전화로 :

이 당신에게 경고 "원래"다음에 경고 "무시"를 제공
var myOriginalFunction = function() { 
    window.alert("original"); 
} 

var original = myOriginalFunction; 

var myOriginalFunction = function() { 
    window.alert("overridden"); 
original(); 
} 

myOriginalFunction(); 

.

그러나 이전 표기법으로이를 시도하면 "끝나지 않은"경고 루프가 계속 될 수 있습니다.

0

상황에 따라 둘 중 하나를 사용할 수 있으며 모두 window 개체의 메서드가됩니다. 나중에 익명 함수라고합니다.

2
  1. 함수 정의
  2. 기능 문자 할당

유일한 차이점은 후자에 할당 기다릴 필요가있는 반면 특정 경우에 즉시 이전에 액세스 할 수 있습니다.

실제 HTML 페이지를 테스트하는 대신이를 테스트하기 위해 방화 광 콘솔/인터프리터에서 실행하지 마십시오.

say('spotted'); 
function say(msg){ alert(msg) } 

은 위의 작동하지만 아래 var say = function(){} 리터럴 함수를 정의하는 경우, 그것은 아직 정의되지 않은 불평 것입니다.

+0

아니요, 이것이 유일한 차이는 아닙니다 - Rob Levine의 대답이 중요한 것을 강조한다고 생각합니다. –

0

기능은 프로그램 전반에 걸쳐 사용할 수 있으며, 이전에 그들이 불리는 곳보다 코드에서 정의 할 필요없이. 그것은 '호이스트 (hoisting)'라고 불립니다.

그래서이

cow('spotted'); 
function cow(color){ return 'cow is '+color; } 

을 작동하지만이 이름이 지정된 함수를 정의하는 첫 번째 샘플에서 오류

cow('spotted');//cow isn't defined yet! 
var cow=function(color){ return 'cow is '+color; } 
2

가 발생합니다 - 그 함수는 항상 그 이름으로 알려진 것입니다. 동일한 이름을 가진 다른 함수를 정의하면 오류가 발생합니다 (창 속성에 직접 할당하지 않은 경우). 두 번째 샘플에서는 익명 함수를 정의하고이를 변수 값으로 지정합니다. 변수의 값을 원하는대로 나중에 다른 함수로 변경할 수 있습니다. 물론 다른 곳에서 저장하지 않았다면 프로세스에서 익명 함수에 대한 참조를 잃어 버릴 수 있습니다. 따라서 두 경우 모두 똑같은 일을하지는 않겠지 만, 원하는 경우 그 방법으로 처리 할 수 ​​있습니다. 두 번째 경우에 함수를 사용하기 전에 함수를 정의해야합니다.하지만 변수의 함수가 더 많습니다. 기능 자체.

관련 문제