我参加了一次面试,除了这个问题外,我回答了所有的问题。
前面的第一个问题是如何编写一个函数使得mod(3,9)
返回0。
好的,很简单:
function mod(a,b){
return b%a;
}
之后的问题是如何编写函数mod(3)(9)
使其返回0?
我被难住了...
我参加了一次面试,除了这个问题外,我回答了所有的问题。
前面的第一个问题是如何编写一个函数使得mod(3,9)
返回0。
好的,很简单:
function mod(a,b){
return b%a;
}
之后的问题是如何编写函数mod(3)(9)
使其返回0?
我被难住了...
你编写一个返回闭包的函数。
function mod(a) {
return function(b) {
return b % a;
}
}
alert(mod(3)(9));
alert
表达式是以下简写:
var tempfun = mod(3);
alert(tempfun(9));
mod(3)
时,它会返回一个函数,该函数接受一个参数b
,并使用保存的绑定a
中包含的3
执行模运算。然后我们可以像使用任何其他函数一样使用它:我们可以将其分配给变量,然后将其作为函数调用,或者我们可以直接在其后加上另一对括号来调用它。var x = mod(3)(9)
的意思是 var f = mod(3); var x = f(3);
。 - Barmarvar f = mod(3); var x = f(9);
吗? - Drazen Bjelovuk首先,仔细看一下这个结构的用法:
mod(3)(9);
您可以将其分为两个步骤:
var fn = mod(3);
fn(9);
从这里可以明显看出,mod(3)
单独必须返回一个新函数,以便稍后可以再次调用。这个新函数需要保留第一次调用时传入的值。这是关键部分:应该将该值存储在闭包中(由于闭包的本质,它会自动存储):
function mod(x) {
return function(y) {
return y % x;
};
}
以下是"闭包"一词的良好解释。如果有人问你(例如面试中),你可以说:闭包是具有其最初创建范围的函数。因此,在上面的函数中,新的内部函数始终具有对外部函数参数x
的内部访问。
function mod(a) {
return function(b) {
return b % a;
}
}
mod(3)(9)
。 - elclanrsmod((3)(9))
不是JavaScript中的有效语法,因此无法编写一个函数来让这样的调用返回0。请注意,这里的mod
可能表示取模运算符。 - zerkms