HOWTO · JavaScript

JavaScript의 정적 변수

이 자습서에서는 JavaScript의 정적 변수를 소개합니다.

이 자습서에서는 JavaScript에서 정적 변수를 만드는 방법을 소개합니다. 정적 변수는 일반적으로 함수에서 사용되는 변수로, 함수 호출간에 값을 유지합니다. static키워드는 클래스의 정적 속성 또는 메서드를 정의하는 데 도움이됩니다.

함수의 속성을 사용하여 JavaScript에서 정적 변수 만들기

JavaScript의 함수는 객체이며 속성을 가질 수 있습니다. 따라서 함수의 속성을 선언하여 정적 변수를 만들 수 있습니다. 전역 변수와 같은 값을 유지하고 함수 외부에서 수정할 수 없으므로 전역 변수보다 훨씬 깔끔합니다.

function getId() {
  if (typeof getId.counter == 'undefined') {
    getId.counter = 0;
  }
  alert(++getId.counter);
}

위의 함수를 여러 번 호출하면 카운터 값이 증가하고 전역 변수와 같은 기능 외부에서 액세스 할 수 없습니다.

IIFE (Immediately Invoked Function Expression)를 사용하여 JavaScript에서 정적 변수 만들기

IIFE는 정의되는 즉시 실행되는 함수입니다. 두 부분으로 구성됩니다.

  1. 그룹화 연산자()로 묶인 어휘 범위가있는 익명 함수.
  2. JavaScript로 직접 해석되는 함수 표현.
var incr = (function() {
  var i = 1;
  return function() {
    return i++;
  }
})();
incr();  // returns 1
incr();  // returns 2

함수가 호출 될 때마다 카운터i가 1 씩 증가합니다. i는 클래스 내부의 일반적인 정적 변수처럼 함수의 속성이기 때문에 외부에서 액세스 할 수 없습니다.

arguments.callee를 사용하여 JavaScript에서 정적 변수 만들기

arguments.callee를 사용하여 JavaScript에 정적 변수를 저장할 수 있습니다. 현재 실행중인 함수를 나타내며 함수 객체와 마찬가지로 속성을 직접 연결할 수 있습니다.

function() {
  arguments.callee.myStaticVar = arguments.callee.myStaticVar || 1;
  arguments.callee.myStaticVar++;
  alert(arguments.callee.myStaticVar);
}

이 방법은 방법 1과 매우 유사합니다. 유일한 차이점은 속성을 직접 연결하는 대신arguments.callee를 사용하여 현재 실행중인 함수에 속성을 추가하는 것입니다.

생성자를 사용하여 JavaScript에서 정적 변수 만들기

이 메소드는C++/Java/C++와 같은 강력한 유형의 객체 지향 언어와 동등한 버전입니다. 모든 인스턴스가 아닌 전체 유형에 변수를 할당하려고합니다.

function delftClass() {
  var privateVariable = 'foo';
  this.publicVariable = 'bar';
  this.privilegedMethod = function() {
    alert(privateVariable);
  };
}
delftClass.prototype.publicMethod = function() {
  alert(this.publicVariable);
};

delftClass.staticProperty = 'baz';
var myInstance = new delftClass();

여기서 생성 함수delftClass를 생성 한 다음 생성 된 인스턴스와 관련이없는 정적 속성을 할당합니다. JavaScript는 함수를 객체로 취급하므로 객체이므로 함수에 속성을 할당 할 수 있습니다. 모든 인스턴스는 정적 변수를 공유합니다.