我刚刚学习了JavaScript中的函数currying。
我做方法调用,例如:
yoHello('m', 'j') //prints m followed by j in the console
yoHello('m', 'j')('k') // prints TypeError: yoHello(...) is not a function
JS代码:
function yoHello() {
for (var i = 0; i<arguments.length; i++) {
if (typeof arguments[i] == "string") {
console.log(arguments[i]);
}
else { //assume function
console.log([].slice.call(arguments[i],0)); //TypeError: yoHello(...) is not a function
}
}
}
如何更改 yoHello 以便提取&#39; k&#39;如上所述传递的论点?另外,我应该怎样查看&#39; k&#39;当它如上所述传递时 - 它是匿名函数的参数吗?或者它应该被视为 yoHello 的另一个实例的参数?
答案 0 :(得分:0)
通过从函数返回函数来进行Currying。例如;
function add(x){
return function(y){
return x + y;
}
}
您可以使用以下内容;
add(1)(2) // = 3
你为什么要用这个?因此,您可以将x
设置为重复使用,然后输入y
;
add1 = add(1);
add1(2) // = 3
add1(9) // = 10
如果你想打印输入的变量,你可以这样做;
function yoHello(){
var args1 = arguments;
return function(){
args2 = arguments;
for (var i = 0; i<args1.length; i++) {
console.log(args1[i]);
}
for (var i = 0; i<args2.length; i++) {
console.log(args2[i]);
}
}
}
yoHello('m', 'j')('k') // logs: m \n j \n k
yo = yoHello('m','j')
yo('k') // logs: m \n j \n k
或者交替;
function yoHello(){
var args1 = arguments;
for (var i = 0; i<args1.length; i++) {
console.log(args1[i]);
}
return function(){
args2 = arguments;
for (var i = 0; i<args2.length; i++) {
console.log(args2[i]);
}
}
}
yoHello('m', 'j')('k') // logs: m \n j \n k
yo = yoHello('m','j') // logs: m \n j
yo('k') // logs: k