>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 괄호가 캡슐화된 익명 함수를 생성하는 이유는 무엇입니까?

JavaScript에서 괄호가 캡슐화된 익명 함수를 생성하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-16 10:41:11374검색

Why Do Parentheses Create Encapsulated Anonymous Functions in JavaScript?

캡슐화된 익명 함수의 구문

JavaScript에서 캡슐화된 익명 함수는 함수를 괄호로 묶고 즉시 실행하여 생성됩니다.

(function(){
    // code here
})();

이 구문은 전역 범위를 다음과 같이 복잡하게 만드는 것을 방지하는 데 사용됩니다. 변수 및 함수.

작동 이유: (function(){})();

함수 선언을 괄호로 묶으면 결과가 함수로 평가됩니다. 표현. 함수 표현식은 선택적 이름을 허용하므로 이 표현식은 이름 없이 실행될 수 있습니다.

작동하지 않는 이유: function(){}();

켜기 반면에 괄호가 없으면 JavaScript는 이를 함수 선언으로 구문 분석합니다. 함수 선언에는 이름 식별자가 필요하지만 이 경우에는 이것이 누락되었습니다.

함수 선언과 표현식

  • 함수 선언: 함수 식별자(매개변수) { . .. }
  • 함수 표현식: (함수 식별자(매개변수) { ... })

함수 표현식에는 이름이 지정되거나 지정되지 않을 수 있지만, 함수 선언에는 이름이 있어야 합니다.

괄호 및 컨텍스트

괄호는 다음을 나타냅니다. 동봉된 코드는 표현식입니다. 함수 선언인지 표현식인지는 상황에 따라 다릅니다. 함수 선언은 전역 범위나 다른 함수의 본문 내에 나타날 수 있지만 함수 표현식은 표현식에만 나타날 수 있습니다.

모호함의 예

0, function foo() {} // Function Expression
function foo() {} // Function Declaration

이 예에서는 , 파서는 컨텍스트에 따라 함수 선언인지 표현식인지 결정합니다. 표현식은 표현식에 나타날 수 있지만 선언은 특정 위치에만 나타날 수 있습니다.

블록 내 함수를 피해야 하는 이유

블록 내부의 함수는 예기치 않은 동작을 초래할 수 있습니다. 변수 범위 문제로 인해. 예를 들면 다음과 같습니다.

if (true) {
  function foo() {
    alert('true');
  }
} else {
  function foo() {
    alert('false!');
  }
}

foo(); // true? false? why?

위 내용은 JavaScript에서 괄호가 캡슐화된 익명 함수를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.