문제 패키지의 폐쇄 범위

<! DOCTYPE HTML > 
< HTML > 
< 머리 > 
    < 제목 > </ 제목 > 
</ 머리 > 
< > 
< 스크립트 유형 = "텍스트 / 자바 스크립트" > 
    // 测试1 
    VAR OBJ = {이름 : ' 하하 ' 데이터 : { 값 : 1 }};
    함수 외측 () {
         VAR objback = obj.data;
        
        } 
        반환 내부; 
        
    } 
    var에 F1 = 외부 (); 
    F1 (); 
    을 console.log ( " 테스트 1. " , OBJ) // {이름 : '하하'데이터 : {값 :.}} 1; 변경되지 

    @ 시험 2 

    VAR obj2보다 = {이름 : ' 하하 ' , 데이터 {값 : . 1 }}
     함수 outer2 () {
         VAR objback = obj2보다,
         함수 내부 () { 
            objback.data =  
            CONSOLE.LOG ( " 시험 21" , JSON.stringify (obj2보다));    // {이름 '하하'데이터 : NULL} 
            objback.name =  " 자위대 " ; 
            CONSOLE.LOG ( " 测试22 " , JSON.stringify (obj2보다));    // {이름 '자위대'데이터 : NULL} 
            objback.data = {}; 
            
            CONSOLE.LOG ( " 测试23 " , JSON.stringify (obj2보다)); // {이름 '자위대'데이터 {}} 
        }
         반환 내측; 
        
    } 
    var에 F2 = outer2을 (), 
    F2 (); 
    콘솔.(로그인 "테스트 2 " 는이 JSON.stringify (obj2보다)) // {"이름 ":"자위대 ","데이터 "{}} 
    
    // 1,2- 폐쇄 개질 클로저에서 참조되는 오브젝트의 오브젝트 속성 바와 반응이 적용되지 후, 반응물을 대상으로 그 전체 개체 참조 될 수 

    // 테스트 3. 
    var에 OBJ3 = {이름 : ' 하하 ' , 데이터 {값 : . 1 }}
     함수 클래스를 ClassA () {
         이 본 .OBJ = {이름 : ' 하하 ' , 데이터 {값 : . 1 }}
         이 본 .outer =  함수 () { 
            
            VAR의 데이터   =   이 본 .obj.data;
             VARDATA3 = obj3.data;
            함수 내부 () { 
                data.value =  2 ; 
                DATA3 = {}; 
            } 
            리턴 내측; 
        } 
        .test = 함수 () { 
            
            CONSOLE.LOG ( " 测试3 " , .obj.data.value) 
        } 
    } 

    VAR의 = 를 ClassA (); 
    a.outer (); 
    시험(); 
    을 console.log ( " 测试3 " , 이 본 .obj3.data)
     // 2,3- 폐쇄 오브젝트 폐쇄 할 수없는 반응 수정 패키지 객체 속성에 의해 참조되는 오브젝트를 설명하지만, 오브젝트가 오브젝트의 값이 반응에 따라 수정 될 수있다 모든 오브젝트를 대상으로 참조되고이 반응 할 수 
    // . 시험 4 
     기능 ClassB가 () {
         이 본 .OBJ = {이름 : ' 하하 ' , 데이터 {값 : 1. }}
         이 본 .outer =  함수 () { 
            
            VAR의 데이터   =  이 본을 .OBJ,
             함수 내부 () { 
        
                data.data.value =  2 ; 
                CONSOLE.LOG ( " 시험 4. " , data.data.value)
                
            } 
            리턴 내측; 
        } 
        .test = 함수 () { 
    
            CONSOLE.LOG ( " 测试4 " , .obj.data.value) 
        } 
    } 
    //
     var에 B =  새로운 ClassB가 (); 
    b.outer (); 
    () b.test; 

    VAR의 데이터 = {값 : 10 데이터 {값 : 1 }}; 
    CONSOLE.LOG (JSON.stringify (데이터)); 
    data.data = {}; 
    을 console.log (데이터) 
    //전반적인 설명은 객체 속성의 객체를 가리 키도록 변경 변수 객체 자체에 반응하지 않을이 속성의 지점을 변경하지만 때문에 전용 변수의 개수. 나는 바보 
</ 스크립트 > 
</ > 
</ HTML >

 

추천

출처www.cnblogs.com/sz-toosimple/p/11769227.html