JavaScript가 개인 변수를 선언하는 두 가지 방법
5720 단어 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입니다.결말
이 글은 제가 알고 있는 자바스크립트 구축 사유 변수의 방법과 작용을 기록합니다. 만약에 오류와 누락이 있으면 지적해 주셔서 감사합니다.
이상은 자바스크립트가 개인 변수를 성명하는 두 가지 방식의 상세한 내용입니다. 자바스크립트가 개인 변수를 성명하는 것에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.