기능 선언
함수 foo () {}FOON은 전체 프로그램이 실행되기 전에 FOO를 들어 올리므로 FOO 함수를 정의하는 전체 범위 (범위)에서 사용할 수 있습니다. 함수 정의 전에 호출해도 괜찮습니다.
foo (); //이 코드가 runsfunction foo () {} 전에 생성 되었기 때문에 작동합니다.스코프를 특별히 소개하는 기사를 작성할 계획이므로 여기에서 자세히 설명하지는 않습니다.
기능 표현
함수 선언의 경우 함수 이름이 필요하지만 함수 표현의 경우 선택 사항입니다. 따라서 익명 함수 표현식 및 명명 된 기능 표현식이 나타납니다. 다음과 같이 :
함수 선언 : function functionName () {}
함수 선언 : 함수 함수 이름 [선택 사항] () {}
그렇다면 함수 이름이 없으면 함수 표현식이어야하지만 함수 이름이 있는지 판단해야합니까?
JavaScript 전체 기능 본문이 표현식의 일부인 경우 함수 표현식이라는 것을 지정합니다. 그렇지 않으면 함수 선언입니다. 다음은 표현입니다.
var fuc = foo () {}몇 가지 극단적 인 표현 예제를 제공합시다.
! 함수 foo () {} true && function foo () {}위의 진술은 단지 함수 표현을 구별하기위한 것이며 일반적으로 이와 같이 쓰여지지 않습니다. 그런 다음 비교 예제를 사용하여 효과를 확인하십시오.
foo1 (); // foo1은 foo2 (); //이 코드가 실행되기 전에 foo2가 생성 되었기 때문에 작동하지 않습니다! foot foo1 () {alert ( 'foo1 works');}; function foo2 () {alert ( 'foo2 work');};익명 기능 표현
var foo = function () {};위의 예는 변수 foo에 익명 함수를 할당합니다.
foo; // 'undefined'foo (); // 이것은 typeErrorvar foo = function () {}를 올립니다.VAR은 선언이므로 변수 FOO가 여기에서 들어 올려 지므로 프로그램이 실행되면 가변 FOO를 호출 할 수 있습니다.
그러나 할당 문은 런타임에만 적용되므로 변수 foo의 값은 정의되지 않습니다.
이름이 지정된 기능 표현
이야기해야 할 또 다른 것은 명명 된 기능의 할당입니다.
var foo = function bar () {bar (); // works}; bar (); // referenceError여기서 명명 된 기능 막대는 변수 foo에 할당되므로 함수 선언 외부에서는 보이지 않지만 막대 함수 내부에서 호출 할 수 있습니다. JavaScript의 이름 지정 기능 메커니즘이기 때문에 함수의 이름은 항상 함수 내의 범위에서 유효합니다.