>  기사  >  웹 프론트엔드  >  JavaScript에서는 내부 함수가 항상 클로저인가요?

JavaScript에서는 내부 함수가 항상 클로저인가요?

DDD
DDD원래의
2024-10-31 08:03:01562검색

Is an inner function always a closure in JavaScript?

JavaScript 클로저와 익명 함수

JavaScript에서는 내부 함수가 외부 범위의 변수에 액세스할 수 있을 때 클로저가 발생합니다. 외부 함수의 실행이 완료되었습니다. JavaScript의 많은 함수는 클로저로 간주되지만 이론적으로는 특정 하위 집합만 특별한 관심을 갖습니다.

사례 1: 친구의 코드

<code class="js">(function f() {
  var i2 = i;
  setTimeout(function g() {
    console.log(i2);
  }, 1000);
})();</code>
  • 함수 f 자유 변수 중 어느 것도 닫혀 있지 않기 때문에 클로저가 아닙니다. 그러나
  • 함수 g는 자유 변수 i2에 대한 클로저입니다. i2 변수는 g가 생성될 때 캡처됩니다.

사례 2: 코드

<code class="js">setTimeout((function f(i2) {
  return function g() {
    console.log(i2);
  };
})(i), 1000);</code>
  • 함수 f는 클로저가 아닙니다. 자유 변수가 없습니다.
  • 함수 g는 자유 변수 i2에 대한 클로저입니다. 변수 i2는 g가 생성될 때 캡처됩니다.

결론

따라서 제공된 두 솔루션 모두에서 내부 함수 g는 클로저이지만 클로저는 아닙니다. 바깥쪽. 이는 동일한 결과를 얻더라도 서로 다른 메커니즘을 통해 달성된다는 것을 보여줍니다.

위 내용은 JavaScript에서는 내부 함수가 항상 클로저인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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