2012-03-23 4 views
0

는 그래서이 오늘처럼 뭔가를 보이는이

첫 번째 예제에 개인 기능은 루프 범위에 대한 그 안에
$$('input').each(// do something); 

, 그것 때문에 다른 곳에서는 참조 할 수 없기 때문에 어떤 이점이 있습니까?

+2

... 괄호 안에 임의의 JavaScript를 포함 할 수 없기 때문에 함수 리터럴을 사용하지 않으면 구문 오류가 발생합니다. – Ryan

+1

당신은 외부 함수를 정의하여 각각에 다음과 같이 전달할 수 있습니다 :'function foo() {alert ('foo!')}; $ ('. input') each (foo); 또는 첫 번째 예제에서와 같이 익명의 함수를 만들고 전달할 수 있습니다 : $ ('. input'). each (function() {alert 'foo!')}); ' – rcplusplus

+0

@minitech, 그래서 당신이 말하는 것은 내가 이런 것을 가질 수 있다는 것입니까? $ (something) .each (a = b; c = d; e = f); – Churk

답변

2

익명 함수는 현재 범위와 변수를 알고 있습니다. foo가 그 범위 내에서 정의되어 있기 때문에

function a() { 
    var foo = 'test'; 
    $('something').each(function() { 
     alert(foo); 
    }) 
} 

이 기능은 '시험'을 경고합니다.

function a() { 
    var foo = 'test'; 
    $('something').each(b) 
} 

function b() { 
    alert(foo); 
} 

이 기능은 변수 foo이 정의되지 없다는 자바 스크립트 오류가 발생합니다.

정확한 범위 내에서만 의미가 있고 많은 변수를 던지거나 많은 것을 다시 계산하지 않으려는 함수를 정의해야하는 경우 익명 함수를 정의하는 것이 더 편합니다.

1

첫 번째 기능은 비공개가 아닙니다. 자바 스크립트는 렉시 컬 스코핑을 가지고 있기 때문에 포함 된 스코프의 모든 변수를 참조하여 클로저를 형성 할 수 있습니다.

두 번째 함수는 함수 이름을 제공하거나 구문 오류가 발생한다는 것을 제외하고는 거의 동일한 것입니다.

짧은 답변 : 함수 문을 두 개 이상 또는 한 가지만 수행하고 매개 변수를 제공하기 위해 함수 문을 넣습니다.

+0

그래서이 함수는 $ (a) .each (function (c) {// c와 함께 뭔가}와 같은 더 많은 매개 변수를 전달할 수 있습니다. 나는 어디에도 다른 방식으로는 할 수 없었다. Ahhhh, 덕분에 – Churk

2

이것은 개인 기능이 아니며 단지 익명의 기능입니다 (이름이없는 기능).

$('input').each(function() { 
// do something 
}); 

을 또는 당신은 할 수 :

당신은 할 수

function foo() { 
// do something 
} 
$('input').each(foo); 

어쨌든, .each 방법은 콜백 인 매개 변수로 함수를 필요로한다.

+0

.each 내가 예제로 골랐다지만, 당신 말이 맞아요,. each() 콜백이지만 비 콜백 iterating 기능이 보인다. – Churk