Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:对象作为函数被调用,尽管它没有被定义为函数——它是如何工作的?_Javascript_Ecmascript 5 - Fatal编程技术网

JavaScript:对象作为函数被调用,尽管它没有被定义为函数——它是如何工作的?

JavaScript:对象作为函数被调用,尽管它没有被定义为函数——它是如何工作的?,javascript,ecmascript-5,Javascript,Ecmascript 5,所以我遇到了这个简单的JavaScript代码,我很惊讶objectA被作为函数调用,尽管它没有被定义为函数。objectA作为函数调用时为什么工作 function greaterThan(x) { return function(y) { return y > x; }; } var objectA = greaterThan(10); console.log(objectA(9)); 这是我的建议 是的,正如@Rob之前所说的,函数比另一个函数更大,因为javas

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

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

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

这是我的建议

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

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

<>记住JavaScript是一种动态语言,它对数据类型和其他普通语言(java、C++、C等)没有限制。
干杯。

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

查看如果运行以下代码会发生什么:

alert(objectA instanceof Function);
要更好地理解,请参阅下一个代码:

function greaterThan(x) {

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

       return result;

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


这段代码中另一个有趣的问题是这个新函数如何维护保存的x值。这个概念称为闭包,您将在这里看到更多

greaterThan
返回分配给
objectA
的函数。有什么不清楚的?啊。这就是“定义”函数的一种方式(即objectA是函数)。我从未在其他语言中见过这种定义。也许这段等效的代码让它更加清晰:谢谢,Rob。是的,这是有道理的。是的,你从未在其他语言中看到过这一点,因为很多语言都没有。JavaScript是其中一种语言,也是该语言最令人敬畏的东西之一。高阶函数(即返回函数的函数)不是松散类型语言的特性,您也可以在静态/强类型语言中使用它们。