JavaScript의 정적 변수
- 함수의 속성을 사용하여 JavaScript에서 정적 변수 만들기
- IIFE (Immediately Invoked Function Expression)를 사용하여 JavaScript에서 정적 변수 만들기
-
arguments.callee
를 사용하여 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는 정의되는 즉시 실행되는 함수입니다. 두 부분으로 구성됩니다.
- 그룹화 연산자
()
로 묶인 어휘 범위가있는 익명 함수. - 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는 함수를 객체로 취급하므로 객체이므로 함수에 속성을 할당 할 수 있습니다. 모든 인스턴스는 정적 변수를 공유합니다.
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn