JavaScript:对象作为函数被调用,尽管它没有被定义为函数——它是如何工作的?
所以我遇到了这个简单的JavaScript代码,我很惊讶objectA被作为函数调用,尽管它没有被定义为函数。objectA作为函数调用时为什么工作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
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是其中一种语言,也是该语言最令人敬畏的东西之一。高阶函数(即返回函数的函数)不是松散类型语言的特性,您也可以在静态/强类型语言中使用它们。