他们在那里所做的是引用该函数而不调用它。
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`)