폐쇄와 귀속의 작용을 깊이 이해하다

12393 단어

폐쇄와 귀속

  • 1.변수의 작용역 복습
  • 2.클로즈업이란 무엇입니까
  • 3.폐쇄의 작용
  • 4.귀속은 무엇입니까
  • 5.반복 실천
  • 6.피보나치 수열을 역귀로 구하기
  • 7.귀속 스트리밍 데이터 활용
  • 1. 변수의 작용역 복습


    변수는 작용역에 따라 두 가지로 나뉘는데 그것이 바로 전역 변수와 국부 변수이다.
  • 함수 내부에서 전역 변수를 사용할 수 있다.
  • 함수 외부에서는 국부 변수를 사용할 수 없습니다.
  • 함수가 실행되면 본 작용역 내의 국부 변수는 삭제됩니다.

  • 2. 클립이란 무엇인가


    클립 (closure) 은 다른 함수 역할 영역에 접근할 수 있는 변수를 가리킨다.간단하게 이해하면 한 작용역은 다른 함수 내부의 국부 변수를 방문할 수 있다.
        <script>
        
    function fn1 (){  //fn1 
        var num = 10;
        function fn2(){
            console.log(num);// 10
        }
        fn2();
    }
    fn1();
    
        </script>
    

    3. 클로징의 역할


    클로즈업은 변수의 작용 범위를 연장할 수 있다.
     function fn() {
       var num = 10;
       function fun() {
           console.log(num);
     	}
        return fun;
     }
    var f = fn();
    f();
    

    4.귀환이란 무엇인가


    귀속: 만약에 하나의 함수가 내부에서 그 자체를 호출할 수 있다면 이 함수는 귀속 함수이다.간단하게 이해: 함수 내부에서 스스로 자신을 호출한다. 이 함수는 바로 귀속 함수>주의: 귀속 함수의 작용은 순환 효과와 마찬가지로 귀속은'창고 넘침'오류(stack overflow)가 발생하기 쉬우므로 퇴출 조건return을 추가해야 한다.

    5. 실천의 귀착


    귀속을 이용하여 1~n의 곱셈을 구하다
    // 1~n  1 * 2 * 3 * 4 * ..n
     function fn(n) {
         if (n == 1) { // 
           return 1;
         }
         return n * fn(n - 1);
     }
     console.log(fn(3));// 6
    

    6. 피보나치 수열을 귀속적으로 구하기

    //  ( )  1、1、2、3、5、8、13、21...
    //   n    
    //  n  (n-1 n-2) n  
    function fb(n) {
      if (n === 1 || n === 2) {
            return 1;
      }
      return fb(n - 1) + fb(n - 2);
    }
    console.log(fb(3));
    

    7. 귀속 스트리밍 데이터 활용

    //  id , 
     var data = [{
       id: 1,
       name: ' ',
       goods: [{
         id: 11,
         gname: ' ',
         goods: [{
           id: 111,
           gname: ' '
         }, {
           id: 112,
           gname: ' '
         },
    
                ]
    
       }, {
         id: 12,
         gname: ' '
       }]
     }, {
       id: 2,
       name: ' '
    }];
    //1.  forEach  
     function getID(json, id) {
       var o = {};
       json.forEach(function(item) {
         // console.log(item); // 2 
         if (item.id == id) {
           // console.log(item);
           o = item;
           return o;
           // 2.   11 12  
           //  goods  0 
         } else if (item.goods && item.goods.length > 0) {
           o = getID(item.goods, id);
         }
       });
       return o;
    }
    

    좋은 웹페이지 즐겨찾기