一尘不染

将变量设置为等于没有括号的函数?

ajax

我正在关注有关AJAX的教程,而制作视频的人做了些奇怪的事情。至少我以前没看过。他们将对象属性设置为等于函数名称,但没有熟悉的()。后来他继续定义功能。下面提供了用于上下文的代码。无论如何,设置不带参数的等于函数的功能是什么意思?该行代码实际上正在运行名为该功能的函数,如下所示。

xmlHTTP.onreadystatechange = handleServerResponse;

有一个名为“ handleServerResponse()”的函数,该行实际运行。我可以发布它,但是我认为这无关紧要。这只是正常功能function handleServerResponse()。任何解释将不胜感激!谢谢!〜Carpetfizz

编辑:添加()到该行的末尾,创建错误,以及对其进行更改。


阅读 246

收藏
2020-07-26

共1个答案

一尘不染

他们在那里所做的是在不 调用 函数的情况下 引用 该函数。 __

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`)
2020-07-26