JS 타이머 와 폐쇄 문제

3763 단어
폐쇄 란 무엇 입 니까?무슨 효과 가 있 습 니까?
함수 내 에서 다른 함수 내부 변 수 를 사용 할 수 있 는 권한 이 있 습 니 다. 이 내부 함 수 는 패 킷 이 라 고 할 수 있 습 니 다.
역할:
  • 다른 함수 내부 의 부분 변 수 를 방문 할 수 있 습 니 다
  • 이 변수의 값 을 메모리 에 저장 합 니 다
  • setTimeout 0 은 어떤 역할 을 합 니까?
    이 코드 를 실행 코드 의 끝 에 놓 고 즉시 실행 하 는 것 과 같 으 며, 모든 코드 가 실 행 된 후에 야 이 코드 를 즉시 실행 하 는 것 과 같다.
  • 아래 코드 출력 은 얼마 입 니까?코드 수정 fnArr [i]() 출력 i.두 가지 이상 의 방법 사용
  •    :
        var fnArr = [];
        for (var i = 0; i < 10; i ++) {
          (function(i){
            fnArr[i] =  function(){
                return i;
            };
          } )(i);
        }
        console.log( fnArr[3]() );
    
       :
        var fnArr = [];
        for (var i = 0; i < 10; i ++) {
          (function(){
            var a = i;            //    ,       i   a
            fnArr[i] =  function(){
                return a;
            };
          } )();
        }
        console.log( fnArr[5]() );
    
  • 자동차 대상 을 폐쇄 적 으로 포장 하면 다음 과 같은 방식 으로 자동차 상 태 를 얻 을 수 있다
  • .
    var Car = (function(){
      var speed = 0 ;
      function setSpeed(n){
        speed = n ;
      }
      
      function getSpeed(){
        console.log(speed) ;
      }
      
      function accelerate(){
       speed += 10 ; 
      }
      
      function decelerate(){
       speed -= 10 ;
      }
      
      function getStatus(){
        if(speed>0){
          console.log('running');
        }
        if(speed===0){
          console.log('stop');
        }
      }
      
      return {
        setSpeed:setSpeed,
        getSpeed:getSpeed,
        accelerate:accelerate,
        decelerate:decelerate,
        getStatus:getStatus,
      };
      
    })();
    
    Car.setSpeed(30);
    Car.getSpeed(); //30
    Car.accelerate();
    Car.getSpeed(); //40;
    Car.decelerate();
    Car.decelerate();
    Car.getSpeed(); //20
    Car.getStatus(); // 'running';
    Car.decelerate(); 
    Car.decelerate();
    Car.getStatus();  //'stop';
    //Car.peed;  //error
    
  • 함 수 를 써 서 setTimeout 을 사용 하여 setInterval 을 모 의 하 는 기능
  • var a= 0;
    function intv(){
        setTimeout(function (){
        console.log(a++);          
        intv();                //              
      },1000);               //1    
    }
    intv();              //     
    
  • 함 수 를 써 서 setTimeout 의 최소 시간 입도
  • 를 계산 합 니 다.
    function num(){
      var i =0;
      var start= Date.now();  //           start
      var clock = setTimeout(function(){  //              
        i++;                     //i  +1
        if(i === 1000){           //   i  1000 
          clearTimeout(clock);       //      
          var end = Date.now();      //            end
          console.log((end-start)/i); //     -               
        } else{
        clock = setTimeout(arguments.callee,0)  //  1000          
        }
      },0)
    }
    num();
    
  • 아래 코드 출력 결 과 는?왜?
  • var a = 1;
    setTimeout(function(){
        a = 2;
        console.log(a);
    }, 0);     //    setTimeout 0,       ,      2
    var a ;
    console.log(a);   //   1
    a = 3;
    console.log(a);   //   3
    
         :
    1
    3
    2
    
  • 아래 코드 출력 결 과 는?왜?
  • var flag = true;
    setTimeout(function(){
        flag = false;
    },0)        //       
    while(flag){}    //flag true,              
    console.log(flag);  
    
         :
     ,       
    
  • 아래 코드 출력 은?delayer: 0, delayer: 1 을 어떻게 출력 합 니까? (패 킷 을 사용 하여 구현 합 니 다)
  • for(var i=0;i<5;i++){
        setTimeout(function(){
             console.log('delayer:' + i );
        }, 0);            //         ,i   5,  delayer:5;
        console.log(i);   //     0,1,2 ,3 ,4
    }
    
    
    for(var i=0;i<5;i++){
      (function(i){
        function set(i){
            console.log('delayer:' + i );    
        }
        return set(i);
      })(i); 
    }
       :
    "delayer:0"
    
    "delayer:1"
    
    "delayer:2"
    
    "delayer:3"
    
    "delayer:4"
    
  • 본 블 로그 의 판권 은 수 줍 은 떫 음 과 굶 주 린 골짜기 의 소유 입 니 다. 전재 출처 를 밝 혀 주 십시오
  • 좋은 웹페이지 즐겨찾기