반응형
자바 스크립트에서 함수 선언 후 빈 괄호 ()는 무엇을합니까?
이 질문에 이미 답변이 있습니다.
프로토 타입 소스를 읽으려고합니다. 나는이 부분에 이르렀다 (안타깝게도이 스 니펫은 처음에있다).
이것은 무엇을 의미 하는가?
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
속성에 할당됩니다 .
반응형
'program story' 카테고리의 다른 글
Android Studio, 에뮬레이터 실행시 갑자기 GPU 드라이버 문제 발생 (0) | 2020.12.25 |
---|---|
두 개의 Subversion 저장소를 동기화하는 방법은 무엇입니까? (0) | 2020.12.25 |
애플리케이션 레이어와 비즈니스 로직 레이어의 차이점은 무엇입니까? (0) | 2020.12.25 |
Hibernate는 getter가있을 때 항상 setter가 필요합니까? (0) | 2020.12.25 |
node-websocket-server : 단일 node.js 프로세스에 대해 여러 개의 개별 "방송"을 가질 수 있습니까? (0) | 2020.12.25 |