자바스크립트의 함수 표현식과 함수 선언의 차이점, 함수 선언과 함수 표현식의 차이점_javascript 스킬

WBOY
풀어 주다: 2016-05-16 15:32:11
원래의
1030명이 탐색했습니다.

함수 표현식 및 함수 선언

ECMAScript에서 함수를 생성하는 가장 일반적인 두 가지 방법은 함수 표현식과 함수 선언입니다. ECMA 사양에서는 함수 선언에 식별자(식별자)가 있어야 한다는 한 가지 사항만 명확하기 때문에 이 둘의 차이점은 약간 혼란스럽습니다. )(모든 사람이 흔히 함수 이름이라고 부르는 이름)이며 이 식별자는 함수 표현식에서 생략될 수 있습니다.

 함수 선언:

 함수 함수 이름(매개변수: 선택){함수 본문}

 함수 표현:

 함수 함수명(선택) (매개변수: 선택) {함수 본문}

그렇다면 함수명이 선언되지 않았다면 반드시 표현식이어야 한다고 볼 수 있는데, 함수명이 선언되어 있다면 함수 선언인지 함수 표현식인지 어떻게 판단할 수 있을까요? ECMAScript는 문맥에 따라 구별됩니다. function foo(){}가 할당 표현식의 일부인 경우 이는 함수 표현식입니다. function foo(){}가 함수 본문 내에 포함되거나 프로그램 맨 위에 있는 경우입니다. 함수 선언.

 function foo(){} // 声明,因为它是程序的一部分
 var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分
 new function bar(){}; // 表达式,因为它是new表达式
 (function(){
  function bar(){} // 声明,因为它是函数体的一部分
 })();
로그인 후 복사

또한 괄호로 묶인 덜 일반적인 함수 표현식(function foo(){})도 있습니다. 괄호()가 그룹화 연산자이고 내부에 포함되기 때문입니다. 표현식에 대해 몇 가지 예를 살펴보겠습니다.

function foo(){} // 함수 선언
(function foo(){}); // 함수 표현식: 그룹화 연산자에 포함됨

이름이 지정된 함수 표현식

물론 명명된 함수 표현식의 경우에는 이름이 있어야 합니다. 이전 예제 var bar = function foo(){}는 유효한 명명된 함수 표현식이지만 기억해야 할 것이 하나 있습니다. 사양에서는 식별자가 주변 범위 내에서 유효할 수 없다고 규정하고 있으므로 새로 정의된 함수의 범위 내에서만 유효합니다.

 var f = function foo(){
  return typeof foo; // foo是在内部作用域内有效
 };
 // foo在外部用于是不可见的
 console.log(typeof foo); // "undefined"
 console.log(f()); // "function"
var f = function foo(){
return foo; // foo是在内部作用域内有效
};
// foo在外部用于是不可见的
console.log(typeof foo); // "undefined"
console.log( f()==f); // "function"
console.log(f.name);//foo
로그인 후 복사

이것이 필수인데 명명된 함수 표현식은 어떻게 사용하나요? 이름이 왜요?

처음에 말했듯이, 이름을 지정하면 디버깅 프로세스가 더 편리해질 수 있습니다. 왜냐하면 디버깅할 때 호출 스택의 각 항목에 이를 설명하는 고유한 이름이 있으면 디버깅 프로세스가 훌륭해지기 때문입니다. , 느낌이 다릅니다.

ps: JS에서 함수 선언과 함수 표현의 차이점

Js의 함수 선언은 다음 형식을 참조합니다.

function functionName(){ 
} 
로그인 후 복사

은 이런 방식으로 함수를 선언하는 반면, 함수 표현식은 다음과 같이 표현식과 같은 함수를 선언합니다.

     var functionName = function(){ 
}
로그인 후 복사

많은 친구들이 이 두 가지 쓰기 방법을 보고 혼동할 수 있습니다. 이 두 가지 쓰기 방법은 비슷하며 둘 다 응용 프로그램에서 사용할 수 있는 것 같습니다. 그러면 둘의 차이점은 무엇입니까?

실제로 js 파서는 함수 선언과 함수 표현식을 동일하게 취급하지 않습니다. 함수 선언의 경우 js 파서는 모든 코드가 실행되기 전에 선언이 구문 분석되었는지 확인하기 위해 먼저 이를 읽습니다. 다른 기본 유형의 변수 정의와 같은 함수 표현식은 특정 문장이 실행될 때만 구문 분석됩니다. 특히, 함수 선언 형식을 사용하여 함수를 정의할 때 호출 문은 함수 선언보다 먼저 작성될 수 있으며, 그렇게 하면 후자에서 오류가 보고됩니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!