함수와 작용역(진급 3)

5987 단어

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

  • 함수 성명은 호출 앞에 놓을 필요가 없습니다
  • 함수 표현식은 반드시 호출 앞에 두어야 한다

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

  • 하나의 작용역 아래에서var성명의 변수와function성명의 함수가 선행된다
  • 함수 작용역에 있지 않고 var성명의 변수와function성명의 함수는 전역의 맨 위에 배치됩니다
  • 함수 작용역 내에서var성명의 변수와function성명의 함수는 함수체의 맨 위에 선행된다

  • 3. arguments는 무엇입니까


    arguments는 함수 모든 매개 변수의 집합 (수조) 으로 함수 내에서 사용할 수 있습니다

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


    js는 재부팅을 지원하지 않습니다. 동명 함수는 덮어씁니다. 매개 변수에 대해 비공식적이거나 유형적인 판단을 해서 함수 재부팅을 시뮬레이션해야 합니다. (if조건 판단 문장으로 가능)

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

  • 아래와 유사한 쓰기 방법은 바로 실행 함수 표현식:
  • (function(){
      //todo
    }())
    
  • 작용: 격리 작용역

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


    답: 두 가지 방법(그중 꼬리 귀속 최적화는 ES6 문법을 사용함) 꼬리 호출 최적화: 호출 함수는 마지막 작업이고 귀속 시 내부 함수만 보존하는 호출 프레임
  • 미호출 최적화의 귀속이 없다
  • function fn(n){
      if(n===1){
        return 1;
      }
      return n*fn(n-1);// : n, 
    }
    
  • 최적화 후의 귀속(꼬리 귀속 최적화)
  • const fm = (n, flat)=>{
      if(n===1){
        return flat;
      }
      return fm(n-1,n*flat);// , , 
    };
    const fmm = (n)=>fm(n,1);
    
  • 인쇄 결과
  • var res1 = fn(10);
    let res2 = fmm(10);
    console.log(res1, res2);//3628800  3628800
    

    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(' ');
    

    답변:
  • get Info('굶주린 계곡', 2,'남');
  • "name":  " "
    "age":  2
    "sex":  " "
    [object Arguments]{0:" ", 1:2, 2:" "}
    "name"  "valley"
    
  • get Info('작은 골짜기', 3);
  • "name":  " "
    "age":  3
    "sex":  undefined
    [object Arguments]{0:" ", 1:3}
    "name"  "valley"
    
  • get Info('남');
  • "name":  " "
    "age":  undefined
    "sex":  undefined
    [object Arguments]{0:" "}
    "name"  "valley"
    

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

    function sumOfSquares(){
       }
       var result = sumOfSquares(2,3,4)
       var result2 = sumOfSquares(1,3)
       console.log(result)  //29
       console.log(result2)  //10
    

    세 가지 방법: 각각 for 순환, for-in 순환과 Object입니다.values(), 코드는 다음과 같습니다.
     function sumOfSquares(){
       let res = 0;
    //  1. for  
    //    for(let i=0; i

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

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

    출력: undefined 오류("error""ReferenceError: b is not defined..."); -var 성명의 변수는 선행자, 즉 console를 성명하기 때문이다.log(a) 전에 a를 성명했기 때문에 undefined를 출력합니다. -b 성명이 없어서 잘못 보고합니다

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

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

    출력: "hello""world"오류 보고("error""TypeError: sayAge is not a function")
  • function 성명의 함수는 호출 전에 쓸 필요가 없다
  • 그러나 함수 표현식은 반드시 먼저 성명하고 호출해야 한다

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

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

    출력: 10
    globalContext = {
      AO:{
        x:10,
        foo:function,
        bar:function,
      },
      scope:none;
    }
    foo['scope'] = globalContext.AO;
    bar['scope'] = globalContext.AO;
    barContext = {
      AO:{
        x:30,
      },
      scope:golbalContext.AO
    }
    fooContext = {
      AO:{},
      scope:golbalContext.AO
    }
    

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

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

    출력: 30, 위조 코드는 다음과 같다.
    globalContext = {
      AO:{
        x:10,
        bar:function,
      },
      scope:none,
    }
    bar['scope'] = globalContext.AO;
    barContext = {
      AO:{
        x:30,
        foo:function,
      },
      scope: globalContext.AO,
    }
    fooContext = {
      AO:{},
      scope:barContext.AO,
    }
    

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

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

    출력 30
    globalContext = {
      AO:{
        x:10,
        bar:function,
      },
      scope:none;
    }
    bar['scope'] = globalContext.AO;
    barContext = {
      AO:{
        x:30,
        foo:function,
      },
      scope:golbalContext.AO
    }
    foo['scope'] = barContext.AO;
    fooContext = {
      AO:{},
      scope:barContext.AO
    }
    

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

    var a = 1;
    
    function fn(){
      console.log(a)
      var a = 5
      console.log(a)
      a++
      var a
      fn3()
      fn2()
      console.log(a)
    
      function fn2(){
        console.log(a)
        a = 20
      }
    }
    
    function fn3(){
      console.log(a)
      a = 200
    }
    
    fn()
    console.log(a)
    

    출력: undefined 51 6 20 200
    globalContext = {
      AO:{
        a:200,
        fn:function,
        fn3:function,
      },
      scope:none;
    }
    fn['scope'] = globalContext.AO;
    fn3['scope'] = globalContext.AO;
    fn3Context = {
      AO:{},
      scope:globalContext.AO,
    }
    fnContext = {
      AO:{
        a:20,
        fn2:function,
      },
      scope:globalContext.AO
    }
    fn2['scope'] = fnContext.AO;
    fn2Context = {
      AO:{},
      scope:fnContext.AO
    }
    

    좋은 웹페이지 즐겨찾기