所以我遇到了这个简单的JavaScript代码,我很惊讶objectA被称为函数,尽管它没有被定义为函数。为什么objectA在被称为函数时才起作用?
function greaterThan(x) {
return function(y) {
return y > x;
};
}
var objectA = greaterThan(10);
console.log(objectA(9));
这是JSFiddle。
答案 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#等)。
干杯。