2013-07-27 7 views
3

나는 AJAX에 관한 튜토리얼을 읽고 있었고, 비디오를 만드는 사람은 이상한 일을했다. 적어도 나는 그것을 보지 못했다. 그들은 친숙한 ()없이 함수 이름과 같은 객체 속성을 설정합니다. 그는 나중에 기능을 정의했다. 컨텍스트에 대한 코드가 아래에 나와 있습니다. 어쨌든 매개 변수없이 함수와 동일한 것을 설정한다는 것은 무엇을 의미합니까? 이 코드 줄은 아래에서 볼 수있는 것처럼 실제로 이름이 지정된 함수를 실행합니다.변수를 괄호없이 함수와 동일하게 설정합니까?

xmlHTTP.onreadystatechange = handleServerResponse; 

"handleServerResponse()"라는 함수가 있는데이 줄이 실제로 실행됩니다. 나는 그것을 게시 할 수 있지만 그것이 부적절하다고 생각한다. 그냥 정상적인 기능 function handleServerResponse()입니다. 모든 설명은 크게 감사하겠습니다! 감사합니다. ~ Carpetfizz

EDIT : 해당 줄 끝 부분에 ()을 추가하면 오류가 생성되고 변경됩니다. 그들이 무슨 일을하는지

답변

8

그것을를 호출하지 않고 함수에를 참조 있다.

var x = foo; // Assign the function foo to x 
var y = foo(); // Call foo and assign its *return value* to y 

JavaScript에서는 함수가 객체입니다. 적절한 물건. 그래서 그들에 대한 참조를 전달할 수 있습니다.

특정 상황에서 준비 상태가 변경 될 때 XHR 개체가 사용하는 콜백으로 handleServerResponse을 설정하는 것입니다. XHR 객체는 ajax 요청을하는 과정에서이 함수를 호출합니다.

좀 더 예 :

// Declare a function 
function foo() { 
    console.log("Hi there"); 
} 

// Call it 
foo();  // Shows "Hi there" in the console 

// Assign that function to a varible 
var x = foo; 

// Call it again 
x();   // Shows "Hi there" in the console 

// Declare another function 
function bar(arg) { 
    arg(); 
} 

// Pass `foo` into `bar` as an argument 
bar(foo);  // Shows "Hi there" in the console, because `bar` 
       // calls `arg`, which is `foo` 

그것은 함수 객체라는 사실에서 자연에 다음,하지만 특별히 x와 위의 foo 사이에 마술 링크가 없다는 것을 부르고 가치; 그것들은 같은 함수를 가리키는 변수 일뿐입니다. 같은 기능을 가리키는 것 외에도 어떤 방식으로도 링크되어 있지 않으며 다른 기능을 가리 키도록 변경하는 것은 다른 기능에 영향을 미치지 않습니다. 예 : 요청 변경의 상태 (예를 들면, 브라우저는 완전한 대답을 수신 할 때), 브라우저는 xmlHttpRequestonreadystatechange의 속성에 저장하는 기능을 호출한다

var f = function() { 
    console.log("a"); 
}; 

f(); // "a" 

var x = f; 

x(); // "a" 

f = function() { 
    console.log("b"); 
}; 

f(); // "b" 
x(); // "a" (changing `f` had no effect on `x`) 
+2

'x = foo'를 실행 한 후에 나중에'x()'를 할 수 있다고 설명 할 수 있습니다. –

+1

@BryanOakley : 나는 정말로했다. :-) –

+2

'foo' 함수를'x'에 할당 한 후에'foo' 함수를 변경했다면'x' 함수는 여전히 동일 할 것입니다 (할당 후에 변경 사항을 상속받지 않습니다). – David

1

. 이 호출은이 속성이 기능 (하지이 함수의 반환 값)를 할당, 호출 할 기능을 결정하는

handleServerResponse(); 

단지 해당됩니다

xmlHTTP.onreadystatechange(); 

같은 것 네가 보여준 선을 사용해서.

자바 스크립트 함수 first class 말한다 언어이기 때문에 가능하다 : 그들은 단지 등 객체, 문자열

1

그것은는 가변 그 함수에 대한 참조를 할당하는 수단과 같은 특성 값이 될 수있다. 그런 다음 참조를 사용하여 대신 함수를 호출 할 수 있습니다. 이 같은...

function foo(){ 
    alert("I am inside foo"); 
} 

var bar = foo; // bar now points to foo 

// Call foo 
foo();// alerts "I am inside foo"; 

// Call bar which is pointing to foo 
bar();// alerts "I am inside foo"; 
관련 문제