JavaScript 클로즈업 인스턴스 설명

2147 단어
이로 인해 내부 함수는 외부 함수를 정의하는 매개 변수와 변수에 접근할 수 있다는 장점이 있다.
우선, 우리는 간단한 대상을 구성한다.
 
  
var testObj = {
    value: 10,
    add: function(inc){
        this.value += (typeof inc === "number") ? inc : 1;
    }
};

testObj.add();
testObj.value; // 11

testObj.add(2);   
testObj.value; // 13


이렇게 쓰면 문제가 하나 있다.value값은 불법으로 수정되지 않을 것을 보장할 수 없으며 다음과 같은 방법으로 수정할 수 있다.
 
  
var testObj = (function(){
    var value = 10;
    return {
        add: function(inc){
            value += (typeof inc === "number") ? inc : 1;
        },
        getValue: function(){
            return value;
        }
    };
})();

testObj.add();
testObj.getValue(); // 11

testObj.add(2);
testObj.getValue(); // 13


테스트 Obj를 초기화하는 함수 형식을 공통적으로 호출할 수 있습니다. 이 함수는 대상의 글씨체를 되돌려줍니다. 함수에value 변수가 정의되어 있습니다. 이 변수는dd와 getValue 방법에 항상 사용할 수 있지만, 함수의 작용역은 다른 프로그램에 보이지 않습니다.또한 내부 함수는 외부 함수보다 더 긴 생명 주기를 가지고 있다는 결론도 얻을 수 있다.
우리는 구조 함수 호출의 예를 계속 보았다.
 
  
var MyObj = function(str){
    this.status = str;
};

MyObj.prototype.getStatus = function(){
    return this.status;
};

var obj = new MyObj("javascript");
obj.getStatus(); // "javascript"


이렇게 쓰는 것은 틀리지 않았지만 약간의'괜한 짓'이 있을 것이다. 왜 get Status 방법으로 직접 접근할 수 있는 속성에 접근해야 합니까?만약 status가 사유 속성이라면, 당연히 의미가 있다.
 
  
var obj = function(status){
    return {
        getStatus: function(){
            return status;
        }
    };
};

var myObj = obj("javascript");
myObj.getStatus(); // "javascript"


여기에서 obj를 호출할 때 getStatus 방법을 포함하는 새로운 대상을 되돌려줍니다. 이 대상의 인용은 myObj에 저장됩니다. obj가 되돌아왔음에도 불구하고 getStatus 방법은 obj 대상의status 속성에 접근하는 특권을 가집니다.getStatus 방법은 이 매개 변수의 복사본에 접근하는 것이 아니라 매개 변수 자체에 접근합니다.이 함수는 창설될 때 상하문 환경에 접근할 수 있기 때문에 폐쇄라고 부른다.

좋은 웹페이지 즐겨찾기