所以我遇到了这个简单的 JavaScript 代码,我很惊讶 objectA 被作为函数调用,尽管它没有被定义为函数。为什么 objectA 在作为函数调用时会起作用?
function greaterThan(x) {
return function(y) {
return y > x;
};
}
var objectA = greaterThan(10);
console.log(objectA(9));
这是JSFiddle。
所以我遇到了这个简单的 JavaScript 代码,我很惊讶 objectA 被作为函数调用,尽管它没有被定义为函数。为什么 objectA 在作为函数调用时会起作用?
function greaterThan(x) {
return function(y) {
return y > x;
};
}
var objectA = greaterThan(10);
console.log(objectA(9));
这是JSFiddle。
您应该知道,在 JavaScript 编程语言中,函数是一等公民。这意味着函数可以存储在变量、数组或对象中。此外,函数可以传递给函数,也可以从函数返回。最后一个行为就是这里发生的事情。当你调用 greaterThan() 函数时,你得到了一个函数。JavaScript 代码中的正常行为。
看看如果运行这段代码会发生什么:
alert(objectA instanceof Function);
为了更好地理解,请参见下一个代码:
function greaterThan(x) {
var result = function(y) {
return y > x;
};
return result;
}
当你调用 greaterThan 函数时,你得到的只是另一个函数。
这段代码中另一个有趣的事情与这个新函数如何维护保存的 x 值有关。这个概念称为闭包,您将在此处了解更多内容JavaScript 闭包是如何工作的?.
是的,正如@Rob 之前所说,函数greaterThan返回另一个函数,因为javascript 是一种松散类型的语言,它对函数返回的内容没有限制。
因此,基于此,行为完全符合预期,您调用一个返回另一个函数的函数,将该新函数存储到一个变量中,现在该变量本身就是一个函数......
请记住,Javascript 是一种动态语言,它对数据类型和其他内容没有限制,如普通语言(Java、C++、C# 等)。
干杯。