JavaScript가 개인 변수를 선언하는 두 가지 방법

앞말


JavaScript는 다른 언어와 달리 개인 변수를 설명하기 위해 키워드를 사용할 수 있습니다.
내가 아는 자바스크립트는 개인 변수를 설명하는 데 사용할 수 있는 방법은 두 가지가 있는데, 하나는 클립을 사용하는 것이고, 하나는 WeakMap을 사용하는 것이다.

가방을 닫다


패키지에 대한 설명은 다음과 같은 여러 가지가 있습니다.
다른 함수 작용역에 접근할 수 있는 함수;
내부 함수가 외부 함수 작용역에 접근하는 교량;
......
폐쇄를 사용하여 개인 변수를 구축하는 논리는 다음과 같다.
1. 외부 함수에서 변수와 내부 함수를 설명한다.
2. 내부 함수로 변수 값에 접근하거나 수정하기;
3. 외부 함수에서 내부 함수로 되돌아오기;

function outside(){
	let val = 123;
	function inside(){
		return val;
	}
	return inside;
}
console.log(outside()());//123
위의 예를 통해 폐쇄를 사용하여 개인 변수를 구축하는 논리를 대체적으로 이해할 수 있지만 개인 변수의 중요성을 나타내기에는 부족하고const 변수도 상기 코드의 효과에 도달할 수 있다.

// , , 
const val = 123;
console.log(val);//123
다음 코드는 개인 변수의 중요성을 구체적으로 나타낼 것이다.

function person(){ 
 let _name = 'unknown';
 let _age = 18;
 let _sex = 'man';

 function setName(name){
  _name = name || 'unknown';
 }

 function getName(){
  return _name;
 }

 function setAge(age){
  if(typeof age === 'number'){
   _age = Math.floor(age);
  }else{
   throw Error("typeof age !== 'number'");
  }
 }

 function getAge(){
  return _age;
 }

 function setSex(sex){
  if(sex === 'man' || sex === 1){
   _sex = 'man';
  }else if(sex === 'woman' || sex === 0){
   _sex = 'woman';
  }else{
   throw Error('input error');
  }
 }

 function getSex(){
  return _sex;
 }

 return {
  setName : setName,
  getName : getName,
  setAge : setAge,
  getAge : getAge,
  setSex : setSex,
  getSex : getSex
 }
}

let xiaoming = person();
let xiaohong = person();
xiaoming.setName('xiaoming');
xiaohong.setName('xiaohong');
console.log('xiaoming name : ' + xiaoming.getName());//xiaoming name : xiaoming
console.log('xiaohong name : ' + xiaohong.getName());//xiaohong name : xiaohong

xiaoming.setAge(19.3333);
xiaohong.setAge('16');//Uncaught Error: typeof age !== 'number'
console.log('xiaoming age : ' + xiaoming.getAge());//xiaoming age : 19
console.log('xiaohong age : ' + xiaohong.getAge());//xiaohong age : 18


xiaoming.setSex(1);
xiaohong.setSex('woman');
console.log('xiaoming sex : ' + xiaoming.getSex());//xiaoming sex : man
console.log('xiaohong sex : ' + xiaohong.getSex());//xiaohong sex : woman
위의 코드에서 알 수 있듯이 설정하거나 가져오려면_name、_age、_sex 세 변수의 값은 고정된 setName, getName, setAge, getAge, setSex, getSex 등 방법만 통과할 수 있고 모든 setter 방법에서 형삼을 판단했다.즉, 대상에 대한 모든 조작이 통제될 것이다. 이것은 어떤 측면에서 자바스크립트가 약한 유형 언어로서의 부정적인 영향을 약화시켰다.

WeakMap


WeakMap에 대해 잘 모르면 먼저 보셔도 됩니다WeakMap 상세 정보 .
이곳은 주로 WeakMap의 키를 이용하여 이 지식을 일일이 열거할 수 없다.

let nameWeakMap = new WeakMap();
let ageWeakMap = new WeakMap();
let sexWeakMap = new WeakMap();

function person(){
 let _hash = Object.create(null);
 nameWeakMap.set(_hash,'unknown');
 ageWeakMap.set(_hash,18);
 sexWeakMap.set(_hash,'man');
 function setName(name){
  nameWeakMap.set(_hash,name || 'unknown');
 }

 function getName(){
  return nameWeakMap.get(_hash);
 }

 function setAge(age){
  if(typeof age === 'number'){
   ageWeakMap.set(_hash,Math.floor(age));
  }else{
   throw Error("typeof age !== 'number'");
  }
 }

 function getAge(){
  return ageWeakMap.get(_hash);
 }

 function setSex(sex){
  if(sex === 'man' || sex === 1){
   sexWeakMap.set(_hash,'man');
  }else if(sex === 'woman' || sex === 0){
   sexWeakMap.set(_hash,'woman');
  }else{
   throw Error('input error');
  }
 }

 function getSex(){
  return sexWeakMap.get(_hash);
 }

 return {
  setName : setName,
  getName : getName,
  setAge : setAge,
  getAge : getAge,
  setSex : setSex,
  getSex : getSex
 }
}

let xiaoming = person();
let xiaohong = person();
xiaoming.setName('xiaoming');
xiaohong.setName('xiaohong');
console.log('xiaoming name : ' + xiaoming.getName());//xiaoming name : xiaoming
console.log('xiaohong name : ' + xiaohong.getName());//xiaohong name : xiaohong

xiaoming.setAge(19.3333);
xiaohong.setAge('16');//Uncaught Error: typeof age !== 'number'
console.log('xiaoming age : ' + xiaoming.getAge());//xiaoming age : 19
console.log('xiaohong age : ' + xiaohong.getAge());//xiaohong age : 18


xiaoming.setSex(1);
xiaohong.setSex('woman');
console.log('xiaoming sex : ' + xiaoming.getSex());//xiaoming sex : man
console.log('xiaohong sex : ' + xiaohong.getSex());//xiaohong sex : woman
마찬가지로 사유 변수를 구축하는 효과도 얻었다.참고로 class에서 개인 변수를 구축하는 데 사용되는 것은 WeakMap입니다.

결말


이 글은 제가 알고 있는 자바스크립트 구축 사유 변수의 방법과 작용을 기록합니다. 만약에 오류와 누락이 있으면 지적해 주셔서 감사합니다.
이상은 자바스크립트가 개인 변수를 성명하는 두 가지 방식의 상세한 내용입니다. 자바스크립트가 개인 변수를 성명하는 것에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기