자동 실행 함수

2726 단어 함수
다음 두 함수를 참조하십시오.

function a(){
	alert("a")
}

var b = function(){
	alert("b")
}

그들 둘은 무엇이 다릅니까?책을 펼치면 저자는 전자는 함수 성명이고 후자는 함수 표현식이라고 알려준다.함수 성명은 일종의 성명으로서 당연히 사전 번역 계급에서 동작(성명 앞당김)을 할 수 있지만 함수 표현식은 할 수 없다.또 다른 차이점은 함수 성명은 괄호를 직접 붙여서 실행할 수 없다는 것이다.세 번째 차이점은 표현식은 계속 세분화할 수 있다. 표현식은 상량, 변수, 조작부호, 함수 등을 조합하여 만든 것이다. 계산 후에 결과 값을 되돌려주고 적어도 undefined를 되돌려준다.

      function a (){
        alert("a")
      }();// 

      var b = function(){
        alert("b")
      }();

     

     (function foo(){}); //  : 
      var bar = function foo(){}; //  , 
      new function bar(){}; //  , New 

function 외투에 괄호 한 쌍 (그룹 조작부호) 을 주면 틀리지 않습니다. 괄호는 표현식이고 표현식이면 되돌아오는 값이 있기 때문에 뒤에 괄호를 붙여서 실행할 수 있습니다.

      (function a (){
        alert("a")
      })();// 

(function a (){
alert("a")
})();//문제없다
실행 코드
그리고 함수명의 작용은 인용에 쓰이는 것을 알고 있습니다. 지금은 쓸모가 없습니다. 우리는 그것을 제거할 수 있습니까?

      (function (){
        alert(arguments.callee)
      })();// 

(function (){
alert(arguments.callee)
})();//자신 팝업
실행 코드
이것을 알면 우리는 편리하게 자신에게 돌아갈 수 있다.만약 깊은 복사 함수를 만들면

var deepExtend = function(destination, source) {
  for (var property in source) {
    if (source[property] && source[property].constructor &&
     source[property].constructor === Object) {
      destination[property] = destination[property] || {};
      arguments.callee(destination[property], source[property]);
    } else {
      destination[property] = source[property];
    }
  }
  return destination;
};

또 다른 편리함에서도 우리가 어떻게 다양한 자동 집행 함수를 겸가로 대량 생산할 수 있는지를 계산했다.함수를 표현식으로 바꾸는 방법이 반드시 그룹 조작부호에 의존하는 것은 아니기 때문에, 우리는void조작부호,~조작부호,!조작부호...

void function(){
  alert(" ");
}()

0, function(){
  alert(" ");
}();

-function(){
  alert(" ");
}();

+function(){
  alert(" ");
}();

!function(){
  alert(" ");
}();

~function(){
  alert(" ");
}();

typeof function(){
  alert(" ");
}();

좋은 웹페이지 즐겨찾기