2012-07-01 3 views
2

누군가가 내게 자바 스크립트에서 무엇을 설명 할 수 있습니까?자바 스크립트에서 전역 가져 오기

(function (x,y){}(x,y)); 

또는이

// global import 
    (function ($, YAHOO) { 
     // now have access to globals jQuery (as $) and YAHOO in this code 
    }(jQuery, YAHOO)); 

나는 자바 또는 C++

답변

3

function(x, y) { }는 anonoymous 함수와 같은 다른 언어로 비슷한 것을 본 적이 없다.

(x, y)은 매개 변수로 xy을 전달합니다.

3

번째 코드 블록의 목적은 가변 빠른 비트를 조회하기 위해 로컬 범위를 가져 YAHOO (전역 $를 형성하지 않음)로 제공 $jQuery 만드는 것이다. 내부 var에 정의 된 모든 변수는 글로벌 수 없기 때문 게다가

, 그것은 새로운 범위를 만듭니다.

첫 번째 코드 블록들은 예를 들어 새로운 변수를 생성하기 위해 이러한 방식으로 사용 당신은 루프에 콜백의 현재 i 값을 가진 변수를 만들 필요가있을 때 : 그 새 범위없이

for(var i = 0; i < 10; i++) { 
    (function(i) { 
     setTimeout(function() { 
      alert("number " + i); 
     }, 1000 * i); 
    })(i); 
} 

당신은 같은i 매번 때문에 경고가 것 "번호 10"(10) 타임스.

1

첫 번째 호출은 익명의 함수를 호출합니다. 익명의 함수는 2 개의 인수를 취해 아무것도하지 않으며 xy을 인수로 사용합니다.

두 번째는 같은 일을한다. 첫 번째 인수 이름으로 $를 사용하고 jQuery를 인수 값으로 전달합니다. 따라서이 함수 내에서 $을 사용하여 jQuery 객체를 참조 할 수 있습니다. 함수 내에서 변수를 다른 이름으로 앨리어스 (alias)하는 방법입니다.

0

C 번호는 람다 식라는 유사한 개념을 갖는다.

public static Func<int> Foo() 
{ 
    int a = 1, 
     b = 2; 

    return() => a + b; 
} 

은 익명으로 선언되는 일반, 일류 기능 (, 그것은 함수 자체가 그 결과를하지 반환됩니다 최고 수준의 기능에 의해 의미)입니다. 이 경우

, 나는 또한 폐쇄라고 무엇을 보여 - 반환 방법은 푸이 범위를 벗어나면 그들을 유지하기 위해 허용하는 '지역'변수 a와 b를 둘러싸. 많은 언어에서 익명 메소드는 클로저를 구현합니다.

익명 방법은 정말 너무 멋지다 - 당신이 벤치 마크 방법으로, 행동 주입을 수행 할 수 있습니다

public static TimeSpan BenchmarkMe(Action timeThis) 
{ 
    Stopwatch sw = Stopwatch.StartNew() 
    timeThis(); 
    sw.Stop; 

    return sw.Elapsed; 
} 

당신은에 대한 벤치 마크를 수행 할이 방법으로 시간 범위를 반환하는 익명 함수를 전달할 수 있습니다 그것에 대한 단 하나의 패스. 멋지다, 응?

관련 문제