JS-task3

5767 단어

함수 표현식은 무엇입니까?무슨 작용이 있느냐

(function (){})() 역할:
  • 함수에서 성명된 변수를 변수 성명 선행 규칙을 빙빙 돌려서
  • 새로운 변수가 전역 변수나 함수명으로 해석되는 것을 피하고
  • 함수 내 변수 성명에 접근할 수 없는 상황에서 함수에 대한 외부 호출 허용
  • //  
    var tmp = newData;
    processData(tmp);
    storeData(tmp);
    
    //  
    (function (){
      var tmp = newData;
      processData(tmp);
      storeData(tmp);
    }());
    

    위 코드에서 쓰기 2는 쓰기 1보다 낫다. 왜냐하면 전체 변수의 오염을 완전히 피하기 때문이다.

    제발귀속으로 실현하다

    function fact(n){
    if(n == 1){ return 1
    } 
     return n*fact(n-1)
    }
    console.log(fact(n))
    

    이 방법은 작법이 간단하고 논리가 명확하지만 효율이 낮다.

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

    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, ' ');   //name:  age:2 sex:  (3)[" ",2," "]  name valley
    getInfo(' ', 3);    //name:  age:3 sex:undifined (2)[" ",3]  name valley
    getInfo(' ');    //name:  age:undifined sex:undifined (1)[" "]  name valley
    

    함수를 써서 매개 변수의 제곱과?

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

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

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

    undifined를 출력하고 오류를 보고합니다.변수 a 성명이 undefined로 향상되고 초기화되었기 때문에 인쇄 a는 undefined입니다.변수 b는 성명이 없기 때문에 오류를 보고합니다.

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

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

    sayName 함수 설명이 향상되었기 때문입니다.sayAge는 함수 표현식이기 때문에 사용하기 전에 값을 부여해야 합니다. 함수 성명은 호출의 뒤에 놓여 있습니다. 이 때 함수가 존재하지 않기 때문에 오류가 발생합니다.

    다음 코드는 무엇을 출력합니까?무엇 때문에

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

    출력1. 우선foo()와 bar() 함수의 성명이 앞당겨지기 때문에 bar()는 정상적으로 실행할 수 있습니다. 2.이어서 bar () 는 foo () 를 호출했고, foo () 는 x 를 출력했습니다.
  • foo 함수가 실행되지 않을 때 x의 값을 얻으려면 먼저 자신의 작용역에서 x변수가 있는지 없는지, 없으면 외부 작용역을 찾아야 한다. 본 예에서 전역 작용역에서 찾으면 10이 된다.

  • 다음 코드는 무엇을 출력합니까?무엇 때문에

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

    출력foo 함수를 호출할 때,foo 함수는 자신의 작용역에서 변수 x를 먼저 찾고, 찾지 못해서 순서대로 바깥쪽으로 찾습니다.bar 함수에서 x값을 30으로 찾았습니다. 찾으면 더 이상 바깥쪽으로 찾지 않습니다. 컨트롤러에서 30을 출력합니다.

    다음 코드는 무엇을 출력합니까?무엇 때문에

    var a = 1
    function fn1(){
      function fn2(){
        console.log(a)
      }
      function fn3(){
        var a = 4
        fn2()
      }
      var a = 2
      return fn3
    }
    var fn = fn1()
    fn() // 
    

    출력원인: fn1이 실행되면 fn3로 돌아가고, fn3가 실행될 때 fn2를 호출하고, fn2에서 변수 a를 출력해야 하기 때문에 변수 a를 찾아야 하지만, fn2에서 이 변수를 정의하지 않아서 외부 fn1을 찾습니다. 변수 a의 값을 찾았습니다. 출력 2.

    다음 코드는 무엇을 출력합니까?무엇 때문에

    var a = 1
    function fn1(){
      function fn3(){
        var a = 4
        fn2()
      }
      var a = 2
      return fn3
    }
    function fn2(){
      console.log(a)
    }
    var fn = fn1()
    fn() // 
    

    출력 1.원인: 함수 최종 결과는 어디에서 실행하는지와 상관없이 초기 환경과 관련이 있습니다. fn3에서 함수 fn2를 호출하면 fn2는 먼저 자신의 작용역에서 변수 a를 찾습니다. 찾지 못해서 전역에서 찾고vara=1을 찾았습니다.

    다음 코드는 무엇을 출력합니까?무엇 때문에

    var a = 1
    function fn1(){
    
      function fn3(){
        function fn2(){
          console.log(a)
        }
        fn2()
        var a = 4
      }
      var a = 2
      return fn3
    }
    var fn = fn1()
    fn() // 
    

    undifined를 출력합니다.원인: 호출 함수 fn1, 반환 함수 fn3, 다음에 fn3 실행 함수체를 호출합니다. 먼저 함수 fn2를 성명하고 변수 성명이 앞당겨집니다. a는 undefined로 초기화되고 실행 함수 fn2, fn2는 먼저 자신의 역할역에서 변수 a를 찾습니다. 찾지 못해서 외부 fn3에서 찾습니다. a값은 undefined로 출력하고 undefined를 출력합니다.만약 var a=4가 함수 fn2를 호출하기 전에 출력한 결과는 4입니다.

    다음 코드는 무엇을 출력합니까?무엇 때문에

    var obj1 = {a:1, b:2};
    var obj2 = {a:1, b:2};
    console.log(obj1 == obj2);  //false
    console.log(obj1 = obj2);   //{a:1,b:2}
    console.log(obj1 == obj2);  //true
    

    대상은 같고 그들의 인용이 메모리의 같은 구역을 가리킬 때만 같다. 즉, 그들이 창고 메모리에 있는 인용 주소가 같음obj1과obj2는 각각 두 개의 다른 대상 인용이다. 그 안에 저장된 주소는 다르다. 즉, 그들이 가리키는 구역은 다르다. 구역의 내용이 같더라도 같지 않다. obj1=obj2를 통해obj2에 저장된 주소를obj1에 부여한 후에obj1과obj2는 같은 구역을 가리키기 때문에 마지막에 둘은 같다.

    다음 코드는 무엇을 출력합니까?무엇 때문에

    var a = 1
    var c = { name: 'jirengu', age: 2 }
    
    function f1(n){
      ++n
    }
    function f2(obj){
      ++obj.age
    }
    
    f1(a)  
    f2(c)   
    f1(c.age) 
    console.log(a)  //1 
    console.log(c)   //{name:'jirengu',age:3}
    

    원인: 우선 a는 비인용 유형이고 함수에 들어간 후 함수에 해당된다. var n = a는 n에게 값을 부여했고 최초의 a와 관련이 없다.그래서 출력 1은 c가 대상이고 인용 형식이기 때문에 마지막에 c.age의 변화를 일으켰다.

    심층 복사 함수를 쓰다

    var obj = {
            name: 'ruoyu',
            sex: 'male',
            age: 30,
            friend: {
                name: 'hello', 
                age: 100
            }
        }
    function deepCopy(oldobj){
        var newobj = {};
       for(var key in oldobj ){
        if(typeof oldobj[key] === 'object'){
            newobj[key] = deepCopy(oldobj[key]);
        }else {newobj[key] = oldobj[key];}
       }
       return newobj;
    }
    var obj2 = deepCopy(obj1)
    console.log(obj2) 
    

    다음 방법을 통해 함수의 매개 변수에 기본값을 설정할 수 있습니다.

    function f(a) {
      (a !== undefined && a !== null) ? a = a : a = 1;
      return a;
    }
    
    f() // 1
    f('') // ""
    f(0) // 0
    

    좋은 웹페이지 즐겨찾기