2012-09-06 2 views
1

가능한 중복 다음을 무엇"! function() {}"은 자바 스크립트에서 무엇을 의미합니까?

!function() { 
    // do something 
}() 

:
What does the exclamation mark do before the function?
! preceding function in javascript?
javascript function leading bang ! syntax

나는 자바 스크립트 조금 최근에이 패턴을 보게되었습니다 쾅쾅키워드의 앞면은 어떻게해야하나요? 나는 intertubez에서 그것에 대해 아무 것도 찾을 수없는 것 같습니다.

+0

네, 위의 세 가지 "가능한 중복"이 모두 대답합니다. 덕분에 – hellatan

답변

1
function() { 
    // do something 
}(); 

이것은 바로 호출되는 함수 선언입니다. 함수 선언은 즉시 호출 할 수 없습니다. 구문 오류입니다.

이 구문 오류를 피하기 위해 대부분의 사람들은 IIFD를 괄호로 묶어 강제로 대신 표현식 (IIFE)으로 사용합니다.

(function() { 
    // do something 
})(); 

이 경우에는 대신 느낌표를 추가했습니다.

+0

실제로, 나는 (이 방식으로'! '를 사용하는 것)을 개발자가 너무 게으르다는 표시로보고, 불필요한 문자를 입력하는 것이 불필요한 부정 및 불일치를 처리하기 위해 여분의 클럭주기에 가치가 있다고 결정했다. 공통된 관례. :-) – Pete

+0

@ Pete : 전혀 아닙니다. 나는 항상 게으 르기 때문에가 아니라 이것을한다. ** 휴대 전화에서 바이트를 절약합니다. ** 특히 모바일 장치의 경우 파일 크기를 최소화하는 것이 중요합니다. 물론, 그것은 단지 1 바이트이지만, 전체적인 페이지 성능을 향상시키고 대역폭을 줄이기 위해 바이트가 합쳐졌습니다. 불필요한 부정은 [complete bunk] (http://jsperf.com/self-executing-style)이고'!'는 당신이 생각하는 것처럼 드문 관행은 아닙니다. – josh3736

+0

@ josh3736 대역폭 청구서 인수를 구매할 수는 있지만, 일부 개발자는 "모바일 장치 용 모든 바이트를 저장해야합니다!" 논의. 모바일 장치는 초절전 된 컴퓨터이기도합니다. 고 대역폭 연결에서 CPU를 가진 누군가를 찾는 경향이 있습니다. 요청을 저장하는 것이 하나의 과제입니다 (모바일에서의 지연은 끔찍합니다). 그러나 바이트를 절약하는 것은 어려운 일입니다. 몇 가지 CPU주기를 절약하면 어느 쪽의 방법 으로든 요청에 ​​대한 추가 전송 바이트 가치가 있음을 확신합니다. – Pete

관련 문제