JavaScript:尽管没有将对象定义为函数,但它被称为函数 - 它是如何工作的?

时间:2013-10-01 17:07:14

标签: javascript ecmascript-5

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

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

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

这是JSFiddle

2 个答案:

答案 0 :(得分:2)

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

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

alert(objectA instanceof Function);

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

function greaterThan(x) {

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

       return result;

    }

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

此代码中另一个有趣的问题与此新函数如何保存x的值有关。这个概念称为闭包,你会在这里看到更多How do JavaScript closures work?

答案 1 :(得分:1)

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

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

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

干杯。