【发布时间】:2013-12-02 21:24:17
【问题描述】:
希望有人能抽出时间来解释一下函数和作用域中的函数。 我试图了解更多关于函数和变量范围的知识,并找到了一个很好的教程,但这部分我只是不明白。
任务:
创建一个类似这样工作的函数 sum:sum(a)(b) = a+b 并接受任意数量的括号。例子:
sum(1)(2) == 3
sum(5)(-1)(2) == 6
解决办法:
function sum(a) {
var sum = a;
function f(b){
sum += b;
return f;
}
f.toString = function() { return sum };
return f; //line 12
}
alert( sum(1)(2) ); // 3e
解释:
要使sum(1) 可以作为sum(1)(2) 调用,它必须返回一个函数。
可以使用valueOf 调用该函数或将其转换为数字。
解决方案真的不言自明:
我的解释:
function f(b) 中的 f 返回到范围,即第 02 - 12 行。
f.toString 中的 f 是当前从 function(b) 返回的 f
下一个return f返回到函数sum(a)之外的作用域。
问题:
我无法弄清楚,我需要在哪里考虑不同的想法,因为就像我上面描述的那样,该函数不会再次被调用,那么代码的哪一部分使“几个括号”成为可能?
此外,我是否正确假设了 fs 的返回位置?如果有人能给出一些解释,那就太好了。
【问题讨论】:
-
使用一个参数调用
sum会返回一个可以使用下一个参数调用的函数。这称为“currying”;使用一个参数调用函数,直到所有参数都被计算,然后返回结果。 -
“下一个
return f返回到函数sum(a)之外的作用域”是什么意思? -
@Bergi 感谢您为我解惑。咖喱是完全不同的野兽。一个奇妙的问题,感谢您提出这个问题,它将创建大量包含多汁信息的答案
标签: javascript function scope