program story

자바 스크립트에서 함수 선언 후 빈 괄호 ()는 무엇을합니까?

inputbox 2020. 12. 25. 09:44
반응형

자바 스크립트에서 함수 선언 후 빈 괄호 ()는 무엇을합니까?


이 질문에 이미 답변이 있습니다.

프로토 타입 소스를 읽으려고합니다. 나는이 부분에 이르렀다 (안타깝게도이 스 니펫은 처음에있다).

이것은 무엇을 의미 하는가?

  Browser: (function(){
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
    }
  })(),

쉼표 앞의 마지막 줄을 참조하고 있습니까?


코드는 익명 함수 ( (function (){ ... })비트)를 정의한 다음이를 호출합니다 (인수없이). 그런 다음 Browser코드 조각 외부에서 정의 될 것으로 추정되는 개체 속성에 값을 할당합니다 .

어딘가에 함수를 정의 할 수도 있습니다.

function myFunction() {
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
}

그런 다음 호출하십시오.

var foo = myFunction();

그런 다음 값을 지정하십시오.

...
Browser: foo,
...

이 방법의 한 가지 단점은 다른 곳에서는 사용하지 않을 함수와 변수로 "네임 스페이스를 오염시킨다"는 것입니다. 두 번째 문제는 함수 정의에서 로컬 범위 변수의 값을 사용할 수 없다는 것입니다 (익명 함수는 클로저로 작동 함).


(function () {}) 익명 함수를 만듭니다.

()끝에를 추가하면 방금 만든 함수가 호출됩니다.

이 특정 함수의 경우 익명 함수는 Browser객체에 여러 속성을 반환 합니다. 그래서, 당신은 예를 들어,에 대한 부울 값으로 끝낼 Browser.IE, Browser.Opera


방금 선언 된 익명 함수를 호출하여 효과적으로 "블록"을 평가합니다.


foo()익명의 함수 리터럴을 호출하는 것과 다르지 않은 단순한 함수 호출이며 함수의 결과가 Browser속성에 할당됩니다 .

참조 URL : https://stackoverflow.com/questions/2422026/what-do-empty-parentheses-after-a-function-declaration-do-in-javascript

반응형