>  기사  >  웹 프론트엔드  >  JavaScript 클로저 및 애플리케이션에 대한 자세한 논의

JavaScript 클로저 및 애플리케이션에 대한 자세한 논의

高洛峰
高洛峰원래의
2017-01-20 11:16:361135검색

저는 클로저를 정말 계속해서 배웠습니다. JS는 심오하고 심오하며, 배울 때마다 새로운 것을 얻은 것 같은 느낌이 듭니다. 나는 모든 사람이 프런트엔드 플러그인을 캡슐화할 때 폐쇄가 필수적이라고 믿습니다. 저는 개인적으로 클로저의 진정한 이점은 캡슐화뿐 아니라 자체적인 전용 메소드를 가져올 수 있고 호출 시 유연하고 편리하다고 생각합니다. 또한 코드의 외부 개체를 깨끗하고 깔끔하게 유지할 수 있습니다.

본론으로 가기

Wikipedia에서는 JS 클로저를 다음과 같이 정의합니다. 컴퓨터 과학에서는 클로저(영어: Closure)를 어휘 클로저(Lexical Closure) 또는 함수 클로저(function closures)라고도 합니다. 자유 변수를 참조하는 함수입니다. 참조된 자유 변수는 그것이 생성된 환경을 떠난 후에도 함수에 남아 있습니다. 따라서 클로저는 함수와 관련 참조 환경으로 구성된 엔터티라고 말하는 또 다른 방법이 있습니다. 클로저는 런타임에 여러 인스턴스를 가질 수 있으며, 서로 다른 참조 환경과 동일한 함수 조합이 서로 다른 인스턴스를 생성할 수 있습니다.

일반인의 관점에서 볼 때 클로저는 일반 함수와 다릅니다. 이를 통해 함수는 즉시 호출 범위 외부에 있는 비지역 변수에 계속 액세스할 수 있습니다. 또한 클로저 구문이 코드를 더욱 동적으로 만든다고 말하고 싶습니다. 다음 코드는 뭔가 느낌을 줄 수 있습니다.

<script>
 (function () {
  var userToken = "this is my token";
  var someConfig = "opening some function";
  var privateValue = "private";
  var publicValue = "public";
  var appObj = {};
  function myPrivateFunc() {
  alert(privateValue)
  }
  appObj.getUserToken = function () {
  //some logic
  userToken += " after some inner logic";
  return userToken;
  }
  appObj.publicVal = publicValue;
  window.application = appObj;
 }());//立即执行
 console.log(application.getUserToken());//this is my token after some inner logic
 console.log(application.publicVal);//public
 console.log(application.privateValue); //undefined
 application.myPrivateFunc(); //error
 </script>


저는 appObj를 창에 첨부합니다. 저는 일반적으로 전체 애플리케이션에 공통되는 최상위 수준을 나타내는 application이라는 전역 개체를 정의하는 것을 좋아합니다. .Object를 사용하면 많은 공용 작업 메서드를 노출할 수 있으며 외부 호출로 인해 문제가 발생하는 것을 방지하기 위해 일부 개인 처리도 수행할 수 있습니다. 정의된 "최상위" 애플리케이션 개체 아래에 있어야 하는 전역 변수를 정의하여 일반 전역 변수가 애플리케이션에 미치는 영향을 방지하고 정의한 클로저 내에서 외부에서 좀 더 명확한 정보를 표현하기 위해 JS 전역 변수를 함부로 정의하는 것은 너무 부끄러운 일이라고 늘 생각해 왔습니다.

VS의 클로저 작성 방법과 강력한 지능형 프롬프트를 사용하면 매우 편안함을 느낄 수 있습니다. 아래에 또 다른 방법을 첨부했습니다

(function () {
  var baseUrl = "www.cnblogs.com/tdws/";
 
  application.getBaseUrl = function () {
  return baseUrl;
  }
 }());
 console.log(application.getBaseUrl());//www.cnblogs.com/tdws/

JavaScript 클로저 및 애플리케이션에 대한 자세한 논의

마지막에 작성하세요

그렇지 않나요? 변수를 계속 유지해야 합니까? 일련의 get 메소드를 매우 동적으로 노출해야 합니다. ╮(╯-╰)╭ 손을 펴십시오...

물론 클로저도 적절하게 사용해야 하며 그렇지 않습니다. 메모리 누수가 발생하기 때문에 순환 참조가 발생합니다. 클로저가 해제되지 않으므로 불필요한 클로저를 만들지 마세요. 공간을 낭비하게 됩니다. 코드가 복잡해지기 때문에 어디에서나 클로저를 사용하지 마세요.

위 내용은 이 글의 전체 내용입니다. 이 글의 내용이 모든 분들의 공부나 업무에 조금이나마 도움이 되었으면 좋겠습니다. 저도 PHP 중국어 홈페이지에 지원하고 싶습니다!

JavaScript 클로저 및 애플리케이션에 대한 더 자세한 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


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