JS 함수 및 역할 영역(단계 3 작업)

5960 단어

1. 함수 성명과 함수 표현식은 어떤 차이가 있는가

  • 함수 성명
  • function  (){
         
    }
    

    코드가 실행될 때 함수 성명은 맨 앞에 실행될 수 있기 때문에 함수의 호출과 함수 성명의 순서는 서로 영향을 주지 않는다.
  • 함수 표현식
  • var   = function(){
         
    }
    

    함수 표현식 방법은 실행 순서가 향상되지 않기 때문에 함수 호출은 반드시 표현식 뒤에 해야 한다.

    2. 변수의 성명 전치는 무엇입니까?함수의 성명 전치가 무엇입니까?


    하나의 작용역 블록에서 모든 변수의 성명과 함수 성명은 블록의 시작에 놓여 먼저 실행됩니다.변수에 대해 말하자면, 먼저 변수 부여 undefined를 성명하고, 부여 문장이 돌아올 때 구체적인 부여 문장을 집행한다.함수에 대해 말하자면, 함수를 먼저 성명하고, 함수를 호출할 차례가 되면 그 안의 코드를 실행한다.

    3.arguments가 뭐예요?


    arguments는 클래스 그룹의 대상이다.이 대상을 통해 함수의 모든 매개 변수에 접근할 수 있습니다.첫 번째 매개 변수는arguments[0]이고, 두 번째는arguments[1]로 추정된다.수조와 같이length 속성이 있습니다.

    4. 함수의'재부팅'은 어떻게 실현되는가


    JS는 재부팅을 지원하지 않으며 아날로그 재부팅만 가능합니다.함수 내부에서if조건문장을 사용하여 전송된 매개 변수의 유형과 수량을 검사하고 서로 다른 문장을 실행하여 재부팅 기능을 시뮬레이션합니다.
    function printPeopleInfo(name, age, sex){
        if(name){
          console.log(name);
        }
    
        if(age){
          console.log(age);
        }
    
        if(sex){
          console.log(sex);
        }
      }
    
      printPeopleInfo('Byron', 26);
      printPeopleInfo('Byron', 26, 'male');
    

    5. 함수 표현식을 즉시 실행하는 것은 무엇입니까?무슨 작용이 있느냐


    이 표현식은 함수가 정의된 후에 즉시 실행할 수 있다.
    !function(){
        /*code*/
    }();
    

    느낌표도 +, ~ 등의 기호로 바꿀 수 있다.괄호로 전체 표현식을 감싸도 됩니다.
    (function(){
        /*code*/
    }());
    

    이 모드는 코드를 초기화하는 데 작용역의 모래상자를 제공하기 때문에 매우 유용하다.다음과 같은 흔히 볼 수 있는 장면을 고려해 보세요. 당신의 코드는 페이지 코드가 불러온 후에 설정 작업을 수행해야 합니다. 예를 들어 시간 프로세서, 창설 대상 등입니다. 모든 작업은 한 번만 수행해야 하기 때문에 복원할 수 있는 명명 함수를 만들 이유가 없습니다. 그러나 이 코드도 임시 변수가 필요하지만 초기화 과정이 끝나면 다시는 사용되지 않습니다.따라서 이 변수들을 전역 변수로 삼는 것은 좋은 생각이 아니기 때문에, 모든 코드를 국부 작용역에 감싸서 어떤 변수도 전역 변수로 유출되지 않도록 함수를 즉각 실행해야 한다.

    6. 제발 n!,귀속으로 실현하다

    function factor(n){
      if(n === 1) {
        return 1
      }
      return n * factor(n-1)
    }
    

    7. 다음 코드는 무엇을 출력합니까?

    function getInfo(name, age, sex){
            console.log('name:',name);
            console.log('age:', age);
            console.log('sex:', sex);
            console.log(arguments);
            arguments[0] = 'valley';
            console.log('name', name);
    }
    
    getInfo(' ', 2, ' ');
    getInfo(' ', 3);
    getInfo(' ');
    
    getInfo(' ', 2, ' '); name: 굶주린 사람 골짜기 age: 2 sex: 남자 ['굶주린 사람 골짜기', 2,'남']name valleygetInfo(' ', 3); name: 소곡age: 3 sex: undefined ["소곡", 3] name valleygetInfo(' '); name: 남자: undefinde sex: undefined ["남"] name valley

    8. 함수를 써서 매개 변수의 제곱을 되돌려줍니까?

    function sumOfSquares(){
        var sum = 0;
        for(var i = 0;i < arguments.length;i++){
            sum += arguments[i] * arguments[i];
        }
        return sum;
    }
    var result = sumOfSquares(2,3,4);
    var result2 = sumOfSquares(1,3);
    console.log(result);  //29
    console.log(result2); //10
    

    9. 다음 코드의 출력은?무엇 때문에

    console.log(a);
    var a = 1;
    console.log(b);
    

    먼저 undefined를 출력한 다음에 오류를 보고합니다.변수 성명이 향상되었기 때문에vara의 조작을 먼저 실행하고 변수가 부여된 값이 없기 때문에console를 실행합니다.log(a);시 a의 값은undefined입니다.b는 값이 부여되지 않았기 때문에 b를 출력할 때 오류를 보고합니다.

    10. 다음 코드의 출력은?무엇 때문에

    sayName('world');
    sayAge(10);
    function sayName(name){
            console.log('hello ', name);
    }
    var sayAge = function(age){
            console.log(age);
    };
    

    Hello World를 출력하고 오류를 보고합니다. 함수 성명 향상 규칙으로 인해 이 코드를 실행할 때sayName 함수를 먼저 설명하고 코드를 실행하기 시작하기 때문에sayName 함수를 호출할 때 오류를 보고하지 않습니다.그러나sayAge 함수는 함수 표현식으로 정의되어 있기 때문에 정의하기 전에 호출하면 오류가 발생합니다.

    11. 다음 코드는 무엇을 출력합니까?역할 영역 체인 찾기 프로세스 위조 코드 쓰기

    var x = 10;
    bar();
    function foo() {
      console.log(x);
    }
    function bar(){
      var x = 30;
      foo();
    }
    

    문제 풀이 사고방식: 전역 작용 영역에는 x=10,foo(),bar()가 있습니다.함수foo() 작용역에 아무것도 없습니다.함수 bar () 역할 영역에는 x=30이 있습니다.이 때 처음부터 코드를 실행합니다,console.log(x) 이 코드는foo() 함수 작용역에 있고foo() 작용역에 x 변수가 없기 때문에 상위 작용역, 즉 전역 작용역에서 찾으면 x=10을 찾을 수 있습니다.그래서 출력 10.

    12. 다음 코드는 무엇을 출력합니까?역할 영역 체인 찾기 프로세스 위조 코드 쓰기

    var x = 10;
    bar() 
    function bar(){
      var x = 30;
      function foo(){
        console.log(x) 
      }
      foo();
    }
    

    문제 풀이 사고방식: 전역 작용 영역에는 x=10,bar () 가 있습니다.함수foo() 작용역에 아무것도 없습니다.함수bar() 작용역에는 x=30,foo()가 있습니다.이 때 처음부터 코드를 실행합니다,console.log(x) 이 코드는foo() 함수 작용역에 있고foo() 작용역에 x 변수가 없기 때문에 상위 작용역에 가서 찾아야 합니다. 이때foo()의 상위 작용역은bar() 작용역이고 x=30을 찾습니다.그래서 출력 30.

    13. 다음 코드는 무엇을 출력합니까?역할 체인의 검색 과정 위조 코드를 작성하다

    var x = 10;
    bar() 
    function bar(){
      var x = 30;
      (function (){
        console.log(x)
      })()
    }
    

    상기와 비슷하게 즉시 실행 함수는 내부 작용역을 창설하는데 그 중에서 변수 x를 찾을 수 없고 작용역 체인에 따라 상급 작용역에서만 찾을 수 있다. 이때 상급 작용역은bar()의 작용역이고 x=30을 찾을 수 있다.그래서 출력 30.

    14. 다음 코드는 무엇을 출력합니까?역할 영역 체인 찾기 프로세스 위조 코드 쓰기

    var a = 1;
    
    function fn(){
      console.log(a)    //1
      var a = 5
      console.log(a)    //2
      a++                     //3
      var a
      fn3()
      fn2()
      console.log(a)         //8
    
      function fn2(){
        console.log(a)                //6
        a = 20                         //7
      }
    }
    
    function fn3(){
      console.log(a)              //4
      a = 200                      //5
    }
    
    fn()
    console.log(a)            //9
    

    전역 역할 영역에는 a=1, fn(), fn3()가 있습니다.fn() 역할역에는 a=5, fn2()가 있습니다.fn2 () 와 fn3 () 작용역에 아무것도 없습니다.
    변수 성명 향상 원칙으로 인해 1시까지 변수 a가 성명되었지만 값이 부여되지 않았기 때문에 undefined를 출력합니다.2까지 실행할 때 변수 a는 이미 5를 부여했기 때문에 5를 출력합니다.3까지 실행할 때 fn() 작용 영역에서 a의 값은 6으로 변경됩니다.4까지 실행할 때 fn3()에서 변수 a를 찾을 수 없기 때문에 상급 작용역, 즉 전역 작용역에서 찾을 수 있습니다. a=1을 찾을 수 있습니다.그러므로 출력 1.5까지 실행하면 전역 역할 영역의 a=200입니다.6까지 실행할 때 fn3()에서 변수 a를 찾을 수 없기 때문에 상급 작용역, 즉 fn() 작용역에서 찾을 수 있습니다. a=6를 찾을 수 있습니다.그러므로 출력7시까지 실행하면 fn() 작용 영역에서 a의 값이 20이 됩니다.8까지 실행하면 fn 역할 영역의 a=20을 출력합니다.마지막으로 9까지 실행하면 전역 역할 영역의 a=200을 출력합니다.
    그래서 출력 결과: undefined 51 6 20 200

    좋은 웹페이지 즐겨찾기