他們在那裏做的是參考來函數沒有叫它。
var x = foo; // Assign the function foo to x
var y = foo(); // Call foo and assign its *return value* to y
在JavaScript中,函數是對象。適當的對象。所以你可以傳遞給他們參考。
在這種特定情況下,他們正在設置handleServerResponse
作爲XHR對象在就緒狀態更改時使用的回調。 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
之間沒有神奇的聯繫;它們都只是指向相同功能的變量。除了它們指向相同的功能外,它們沒有以任何方式鏈接,而改變它(例如指向另一個功能)對另一個功能沒有影響。例如:
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`)
您可能想進一步解釋,在執行'x = foo'後,您可以稍後執行'x()'。 –
@BryanOakley:我確實。 :-) –
也可能值得注意的是,如果您在將'foo'函數賦值給'x'後,'x'函數仍然是相同的(它不會繼承賦值後的更改)。 – David