2013-07-01 2 views
1

이들의 차이점은 무엇입니까?자바 스크립트 : var myFunc = function()과 var myFunc = function myFunc()

var myFunc = function() { 
    // ... 
}; 

var myFunc = function myFunc() { 
    // ... 
}; 
2 예에서

, arguments.callee.caller.name 작품,하지만 첫 일인치 두 번째 구문에 문제가 있습니까?

+0

음 ... 이름은? –

+1

'var func = function F() {};'는 함수 블록 내에서'F()'를 사용할 수 있지만 외부에서는 사용할 수 없습니다. – Passerby

+0

'arguments.callee'는 더 이상 사용되지 않으므로, 그런 종류의 기능이 필요할 경우 명명 된 함수 표현식을 사용하십시오. – finishingmove

답변

2

함수 리터럴의 name는 선택 사항입니다.

JavaScript: The Good Parts by Douglas Crockford 내지 리터럴

함수는 크게 네 부분으로 구성되어있다. 첫 번째 부분은 예약어 이고 기능은입니다. 선택적 두 번째 부분은 함수의 이름입니다. 이 함수는 이름을 사용하여 재귀 적으로 호출 할 수 있습니다. 이 이름은 디버거 및 개발 도구에서 함수를 식별하는 데 사용할 수도 있습니다. 앞의 예제에서와 같이 함수에 이름이 지정되지 않은 경우 익명 인 이라고합니다.

+1

당신은 내가 좋아하는 책 중 하나를 언급했습니다. 감사. 나는이 절을 복습 할 것이다. – vcardillo

1

첫 번째 기능은 이 아니며입니다.

함수에 변수를 할당해도 함수에 이름이 지정되지 않습니다.

7

두 번째 것은 이름이 있지만 첫 번째 것은 이름이 없습니다. 함수는 name 속성을 가진 개체입니다. 함수가 익명이면 이름이 없습니다. 당신은 함수가 익명이라고합니다 보여주는 첫 번째 경우에 생략하는 경우

var a = function(){}; // anonymous function expression 
a.name; //= empty 

var a = function foo(){}; // named function expression 
a.name; //= foo 
+0

각 장단점은 무엇입니까? 두 번째 구문에 문제가 있습니까? – vcardillo

+0

(이름 지정의 중복성 제외) – vcardillo

+0

중복이 없습니다. 처음에는 이름이 없습니다. 장점은 재귀를 위해 함수 내에서 함수를 호출 할 수 있으며 호출 스택 추적에서 이름을 볼 수 있다는 것입니다. – elclanrs

관련 문제