我是一名学生,并且来自较低级的语言(Java),所以对此我感到非常困惑。
例如:
function sum (x){
let z = function (y) {return x + y };
return z;
}
sum(1)(2) // returns 3
sum(1)(2)
如何工作?我认为sum(1)
返回z
,据此调用了z(2)
,但我对此不太了解。另外,为什么不给函数命名就只将z
初始化为function (y)
?从低级语言角度讲解JavaScript的任何技巧?我很难过。
您正在调用sum(1)
,然后用(2)
调用返回值。在这种情况下,返回值是一个函数,因此可以调用它。就像这样写:
function sum(x) {
let z = function(y) {
return x + y
};
return z;
}
let returnValue = sum(1);
console.log(returnValue);
console.log(returnValue(2));
returnValue
是一个函数,与预期的一样。此函数采用1个参数y
,并使用第一个函数的创建范围中的x
返回x + y
。[使用语法let z = something
时,正在使用表达式定义something
。就像您将定义let a = 1
而不是let a = myVar 1
(??)一样,函数也是如此。您无需为其命名,因为您可以将该函数称为z
。知道了吗?
[如果您想学习JS,我真的建议您阅读You Don't Know Javascript。在我以为我知道JS之后,就读了它,并且发现了很多我不知道的东西。它还说明了js中的工作原理。
更多,还有很多可以教你训练的网站。只是谷歌它。
java
不是低级语言,而是高级语言。
您是对的,sum(1)
返回z,这只是分配了匿名函数的变量。]>
在JS中,可以通过两种方式定义函数,即函数声明或函数表达式。您可以在MDN中查找确切的定义here。
您所拥有的是一个函数表达式,并且函数表达式可以命名或匿名。
[我也建议阅读更多有关JS中的函数如何维护其自身范围的信息,这是z
如何引用参数x
的原因。
我希望这能给您更多的见识!
在JavaScript中,函数是对象(实际上,所有对象都是对象),因此可以使用变量引用它们,也可以从其他函数返回它们。因此,当您从函数中返回z时,它将返回一个匿名函数。