JavaScript에는 블록 수준 범위가 없고 전용 수정자가 없지만 함수 범위는 있습니다. 범위의 이점은 내부 함수가 외부 함수의 매개변수 및 변수에 액세스할 수 있다는 것입니다(this 및 인수는 제외. 내부 함수에서 이것은 전역 객체를 가리키고 인수는 내부 함수의 함수 매개변수를 가리킵니다). 이 속성을 사용하여 객체 지향의 개인 속성을 시뮬레이션할 수 있습니다.
var myObject=function(value ){
var value=value || 0;
increment:function(num){
value =typeof num==='number' ? ,
setValue:function(num){
value = typeof num==='number' ? num : value
},
getValue:function(){
반환값; 🎜>}
}
}(10)
//alert(myObject.getValue()) //10
myObject.setValue(20)
//alert(myObject. getValue() ); //20
myObject.increment(5);
alert(myObject.getValue()); //25
위의 예와 같이 myObject는 익명 함수 개체 실행 후 반환됩니다. 익명 함수의 변수 값은 익명 함수 외부에서는 액세스할 수 없지만 내부 함수에서는 액세스할 수 있습니다. 익명 함수의 실행은 반환된 myObject 개체에서 계속 액세스되므로 값은 입니다. 그것에 의해 점유된 기억은 파괴되지 않습니다. 이때 내부변수 값은 myObject 객체의 private 변수와 동일하다.
var name='MyObject';
return{
increment:function(num){
value =typeof num==='number' ? num : 0; setValue:function (num){
value = typeof num==='number' ? num : value
},
getValue:function(){
//alert(this); 🎜>반환 값;
},
getName:function(){
반환 이름
},
setName:function(nameStr){
name=nameStr; },
toString:function(){
return '[객체:' 이름 ']'
}
}
}
var obj=myObject(5); >obj.increment(6);
//alert(obj.getValue()); // 11
//alert(obj) //[Object:MyObject]
obj.setName(' 임시 객체 01 ');
alert(obj) //[객체:임시 객체 01]