> 웹 프론트엔드 > JS 튜토리얼 > js 함수 선언 및 함수 표현 분석

js 함수 선언 및 함수 표현 분석

不言
풀어 주다: 2018-07-14 17:40:56
원래의
1675명이 탐색했습니다.

이 글은 주로 js의 함수 선언과 함수 표현식 분석을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

1. 정의

자바스크립트에서는 함수를 정의합니다.

함수 선언

  function say(){
     console.log('函数声明');
  }
로그인 후 복사

함수 표현식

   var say = function(){
      console.log('函数表达式');
   }
로그인 후 복사

2. 예제 분석

일반적인 개발에서는 눈에 띄지 않는 차이가 있습니다. 다음 예제를 살펴보겠습니다. 먼저 마음 속으로 답을 생각해 보세요. 실행 결과는

    say();
    var say = function(){
          console.log('函数表达式');
    }
    say();
    function say(){
     console.log('函数声明');
    }
    say();
로그인 후 복사

자, 결과를 분석해 보겠습니다.

1. say 함수가 처음 호출될 때 함수가 정의되어 있지 않은데 왜 그런가요? "function"을 인쇄할 수 있나요? "statement"의 값은 어떻습니까? 그 이유는

javascript 인터프리터에서 변수 선언이 승격되는 메커니즘이 있기 때문입니다. 이는

함수 선언
이 코드가 마지막에 작성되더라도 앞으로 승격된다는 의미입니다. 여전히 최전선으로 승진하세요. 함수 표현식으로 생성된 함수는 런타임에 할당되며 표현식 할당이 완료될 때까지 호출할 수 없습니다
따라서 함수가 아직 정의되지 않은 경우에도 위와 같이 함수 선언이 맨 앞으로 승격되었습니다. code는 다음과 같습니다.
函数声明
函数表达式
函数表达式
로그인 후 복사

다음 두 가지를 비교하면 "함수 선언 승격"의 개념을 더 잘 이해할 수 있습니다.

1.

    var say; //变量被提升,此时的值为undefined
    say();// 函数被提升,输出“函数声明”
    var say = function(){
          console.log('函数表达式');
    }
    say();
    function say(){
     console.log('函数声明');
    }
    say();
로그인 후 복사

2.
var say;
console.log(say);
say();
function say(){
   console.log('函数声明');
}

输出:
f say(){
   console.log('函数声明');
}
函数声明
로그인 후 복사

2. 이때는 먼저 간단하게

로 이해하면 될까요? 실제로 런타임 시 함수 선언의 승격으로 인해 실제 실행 순서는 다음과 유사합니다.

var say;
console.log(say);
say();
var say = function(){
   console.log('函数表达式');
}

输出:
undefined
Uncaught TypeError: say is not a function
    at <anonymous>:3:1
로그인 후 복사
函数表达式覆盖了函数声明,因此输出了‘函数表达式’,然而到了第三次调用say函数时,此时打印的竟然还是‘函数表达式’??为什么后面的函数声明没有覆盖前面的函数表达式3. 요약

1. 함수 선언은 JS 구문 분석 중에 승격되므로 동일한 범위 내에서는 함수 선언이 정의되면 함수를 호출할 수 있습니다.

2. 함수 표현식의 값은 JS가 실행될 때 결정되며, 표현식 할당이 완료된 후에만 함수를 호출할 수 있습니다.


위 내용은 모두의 학습에 도움이 되기를 바랍니다. . 더 많은 관련 콘텐츠를 보려면 PHP 중국어 웹사이트를 팔로우하세요!

관련 권장 사항:

JS를 통해 의사 배열을 배열로 변환하는 방법


JS를 사용하여 배열 차이 방법을 찾는 방법

위 내용은 js 함수 선언 및 함수 표현 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿