기능을 선언하는 방법
일반적으로 함수를 선언하는 두 가지 방법이 있습니다.
foo () {}; // 함수 선언 var foo = function () {}; // 함수 표현식차이
1. 기능 표현식은 그 후 괄호로 직접 실행할 수 있습니다.
2. 함수 선언은 미리 준비됩니다
분석 전
먼저 예를 살펴 보겠습니다.
foo (); // 함수 선언 foo_later (); // foo_later는 functionfunction이 아닙니다. foo () {console.log ( 'function declaration'); } var foo_later = function () {console.log ( 'function expression'); }보시다시피, 함수 선언 FOO는 사전 처리되며 자체 코드 전에 실행할 수 있습니다. 함수 표현식 foo_later는 할 수 없습니다. 이 문제를 해결하려면 먼저 JavaScript Parser의 작동 메커니즘을 파악해야합니다.
가변 부스트 (호이스트)
JavaScript Parser는 자체 범위로 변수 및 기능 선언을 들어 올립니다. 즉, 위의 예는 실제로 파서에 의해 다음과 같은 형식으로 이해되고 구문 분석됩니다.
함수 foo () {console.log ( '함수 선언'); } // 모든 함수 선언은 고급 var foo_later입니다. // 함수 표현식 (변수 선언) 만 변수 만 발전시키고 할당 작업이 고급 Foo ()가 아닙니다. foo_later (); foo_later = function () {console.log ( 'function expression'); }또한 함수 표현식이 오류를 반환하기 전에 함수를 호출하는 이유를 설명 할 수 있습니다. 아직 지정되지 않았기 때문에 정의되지 않은 변수 일 뿐이며 물론 실행할 수 없습니다.
마찬가지로 다음 코드의 출력을 추측 할 수도 있습니다.
Console.log (선언자); var declaredlater = "지금은 정의되었습니다!"; console.log (declaredlater);
이 코드는 다음 형식으로 구문 분석 할 수 있습니다.
var 선언자; Console.log (선언자); // undefinedDeclaredLater = "이제 정의되었습니다!"; console.log (declaredlater); // 이제 정의되었습니다!
변수 선언이 먼저 언급되어 있으므로 (변수의 오류는보고되지 않음) 할당이 발전되지 않았으므로 첫 번째 출력 결과는 정의되지 않았습니다.
그것은 주목해야합니다
함수 선언이 전파 되었으므로이 방법을 사용하여 다른 기능을 선언하지 마십시오. 다음 예제의 출력을 추측하십시오.
if (true) {function aaa () {alert ( '1'); }} else {function aaa () {alert ( '2'); }} aaa ();우리가 기대했던 것과 달리 코드는 "2"로 나타납니다. IF 문이 실행되기 전에 두 기능 선언이 미리 정리되어 있기 때문에 IF 문은 전혀 쓸모가 없기 때문입니다. AAA ()가 호출되면 다음 함수가 직접 실행됩니다.
요약
위의 설명을 통해 다음과 같이 요약 할 수 있습니다.
• 변수의 선언은 범위의 상단으로 진행되며 할당은 그대로 유지됩니다.
• "전"전체의 기능 선언
• 함수가 변수에 값으로 할당되면 변수 만 "고급"이며 함수는 "고급"이 아닙니다.
위의 예를 연습하여 더 많은 경험을하십시오. 또한 모범 사례로 : 변수 선언은 범위/함수의 최상위에 배치해야합니다 (JavaScript는 함수 스코프 만 있습니다!).
위의 기사는 기능 선언, 함수 표현식 및 가변 개선을 종합적으로 이해하는 것이 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.