调用具有多个闭包的 JavaScript 函数
calling a javascript function with multiple closures
function sum(a) {
var sum = a
function f(b) {
sum += b
return f
}
f.toString = function () { return sum }
return f
}
var a = sum(0)(1)(2)(3)(4)(5);
有人可以向我解释这段代码是如何工作的吗?我真的不知道如何以这种方式调用具有多个闭包的函数。以及为什么当我在浏览器控制台中打印时,结果是"函数 15"而不仅仅是 15
以及为什么当我在浏览器控制台中打印时,结果是"函数 15"而不仅仅是 15
要获得最终结果,您应该调用toString
函数。此闭包在调用函数之前toString
保持总和。
function sum(a) {
var sum = a
function f(b) {
sum += b
return f
}
f.toString = function() {
return sum;
}
return f
}
var a = sum(0)(1)(2)(3)(4)(5);
document.write(a.toString());
sum(0)
返回一个函数f
,该函数在局部变量sum
(该代码中唯一的闭包(上关闭。因为它返回一个函数,这意味着你可以调用该函数,该函数也接受一个参数并返回自身,这就是你可以保持这样链接的方式。
sum(0) // `sum` is 0, returns f (a function)
sum(0)(1) // returns f which adds 1 to `sum` and returns f again
// and again etc
另一种思考方式:
var fn0 = sum(0) // `sum` is 0, returns f (a function)
var fn1 = fn0(1) // returns f which adds 1 to `sum` and returns f again
var fn2 = fn1(2) // ...
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别