1

所以我遇到了这个简单的 JavaScript 代码,我很惊讶 objectA 被作为函数调用,尽管它没有被定义为函数。为什么 objectA 在作为函数调用时会起作用?

function greaterThan(x) {
  return function(y) {
    return y > x;
  };
}

var objectA = greaterThan(10);
console.log(objectA(9));

这是JSFiddle

4

2 回答 2

2

您应该知道,在 JavaScript 编程语言中,函数是一等公民。这意味着函数可以存储在变量、数组或对象中。此外,函数可以传递给函数,也可以从函数返回。最后一个行为就是这里发生的事情。当你调用 greaterThan() 函数时,你得到了一个函数。JavaScript 代码中的正常行为。

看看如果运行这段代码会发生什么:

alert(objectA instanceof Function);

为了更好地理解,请参见下一个代码:

function greaterThan(x) {

       var result = function(y) {
            return y > x;
        };

       return result;

    }

当你调用 greaterThan 函数时,你得到的只是另一个函数。

这段代码中另一个有趣的事情与这个新函数如何维护保存的 x 值有关。这个概念称为闭包,您将在此处了解更多内容JavaScript 闭包是如何工作的?.

于 2013-10-01T17:43:33.103 回答
1

是的,正如@Rob 之前所说,函数greaterThan返回另一个函数,因为javascript 是一种松散类型的语言,它对函数返回的内容没有限制。

因此,基于此,行为完全符合预期,您调用一个返回另一个函数的函数,将该新函数存储到一个变量中,现在该变量本身就是一个函数......

请记住,Javascript 是一种动态语言,它对数据类型和其他内容没有限制,如普通语言(Java、C++、C# 等)。

干杯。

于 2013-10-01T17:13:16.263 回答