YUI를 배우며 가끔이 관용구를 보았습니다.JavaScript 관용구 : 호출 할 함수 만 작성하십시오.
<script>
(function x(){ do abcxyz})();
</script>
왜 함수를 호출할까요? 왜 쓰는 것 :
<script>
do abcxyz
</script>
예를 들어 here을 참조하십시오.
YUI를 배우며 가끔이 관용구를 보았습니다.JavaScript 관용구 : 호출 할 함수 만 작성하십시오.
<script>
(function x(){ do abcxyz})();
</script>
왜 함수를 호출할까요? 왜 쓰는 것 :
<script>
do abcxyz
</script>
예를 들어 here을 참조하십시오.
그들은 closures을 이용하고 있습니다.
간략한 설명 : JS가 기능 수준 범위 지정을 사용하기 때문에 함수 내에서 일련의 작업을 수행하고 그 범위에 남아있을 수 있습니다. 전역 네임 스페이스를 사용하지 않는 코드를 호출 할 때 유용합니다. 또한 private 변수를 만들 수 있습니다. 익명 함수 내부에 변수를 선언하고 즉시 실행하면 익명 함수 내부의 다른 코드 만 해당 변수에 액세스 할 수 있습니다.
예를 들어, 전역 고유 ID 생성기를 만들고 싶다고 가정 해보십시오. 카운터와
var counter = 0;
var genId = function()
{
counter = counter + 1;
return counter;
}
그러나 지금은 누구나 할 수있는 혼란을, 그리고 지금은 두 변수 (카운터 및 에 GenID)와 글로벌 네임 스페이스를 오염했습니다 하나는이 같은 코드를 할 수 있습니다.
대신, 내 카운터 기능을 생성하는 익명 함수를 사용할 수 있습니다
var genId = function()
{
var counter = 0;
var genIdImpl = function()
{
counter = counter + 1;
return counter;
}
return genIdImpl;
}();
지금, 나는 단지 유리하다 전역 네임 스페이스에 하나 개의 변수가있다. 더욱 중요한 점은 counter 변수가 수정되지 않아 안전하다는 것입니다. 익명 함수의 범위에만 존재하기 때문에 같은 범위에 정의 된 genIdImpl 함수 만 액세스 할 수 있습니다.
YUI의 예제 코드처럼 전역 이름 공간을 전혀 오염시키지 않는 코드를 실행하려고합니다.
그들은 네임 스페이스 충돌을 피하기를 원합니다. JS에서 우수 사례로 보입니다.
참조 : http://stackoverflow.com/questions/631187/javascript-scope-and-closure/ –