JavaScript 학습 노트(4) - 함수 표현식

2690 단어

익명 함수

var functionName = function(arg0, arg1,arg2){
  //do sth
};

역할: 블록 레벨 역할 영역 모방
// ( ) 
(function(){
  // 
})(); // 

function output(count){
  (function(){
    for(var i = 0; i < count; i++ ){
      console.log(i);
    }
  })();

  console.log(i); //  
}

차례로 돌아가다

function factorial(num){
  if (num <= 1 ){
    return 1;
  } else {
    return num * arguments.callee(num - 1); // arguments.callee 
  }
}

엄격한 모드에서 명명 함수 사용하기
var factorial = (function f(num){
  if (num <= 1){
    return 1;
  } else {
    return num * f(num - 1);
  }
});

가방을 닫다


패키지는 다른 함수 작용역에 접근할 수 있는 변수를 가리키는 함수입니다.패키지를 만드는 데 흔히 볼 수 있는 방식은 한 함수 내부에서 다른 함수를 만드는 것이다.
함수 내부에서 다른 함수를 정의하면 패키지를 만듭니다.패키지를 닫으면 함수 내부를 포함하는 모든 변수에 액세스할 수 있습니다.
  • 백그라운드 실행 환경에서 패키지의 역할역 체인은 자신의 역할역, 함수를 포함하는 역할역과 전역 역할역을 포함한다..
  • 일반적으로 함수의 작용역과 모든 변수는 함수 집행이 끝난 후에 소각된다
  • 함수가 하나의 패키지를 되돌려주면 이 함수의 작용역은 메모리에 패키지가 존재하지 않을 때까지 저장됩니다..
  • function createFunctions(){
      var result = new Array();
      for (var i = 0; i < 10; i++ ){
        result[i] = function(){
          return i;
        };
      }
      return result;
    }
    
    var result = createFunctions();
    result.forEach(function(item, index, array){
      console.log(item());//10 10
    });
    

    모든 함수는 10을 되돌려줍니다. 모든 함수의 작용역 체인에createFunctions () 함수의 활동 대극이 저장되어 있기 때문에 같은 변수 i를 인용합니다.createFunction() 함수가 반환되면 변수 i의 값은 모두 10입니다.
    익명 함수를 정의하고 이 익명 함수를 즉시 실행한 결과를 그룹에 부여하면 이 문제를 해결할 수 있습니다.
    function createFunctions(){
      var result = new Array();
      for (var i = 0; i < 10; i++ ){
        result[i] = function(num){
          return function(){
            return num;
          };
        }(i);
      }
      return result;
    }
    
    var result = createFunctions();
    result.forEach(function(item, index, array){
      console.log(item());//0~9
    });
    

    역할: 개인 변수에 접근하는 공유 방법을 만드는 데 사용됩니다.
    특권 방법: 개인 변수와 개인 함수에 접근할 수 있는 공유 방법
    // 
    var f = function(){
      // 
      var privateVar = 10;
    
      function privateFunction(){
        return false;
      }
    
      // 
      var object = new CustomType();
    
      // / 
      object.publicProperty = true;
    
      object.publicMethod = function(){
        privateVar++;
        return privateFunction();
      };
    
      return object;
    
    }();
    

    this


    몇 가지 특수한 상황에서,this의 값은 의외로 바뀔 수 있다.
    var name = "The Window";
    
    var object = {
      name : "Object",
    
      getName : function(){
        return this.name;
      }
    };
    
    object.getName(); // 'Object"
    (object.getName)(); // "Object"
    (object.getName = object.getName)(); //"The Window"
    

    좋은 웹페이지 즐겨찾기