javascript - 在 javascript 中,我们可以调用一个函数作为 functionName(5)(3); 吗?

标签 javascript

在 javascript 中我们可以调用下面提到的函数吗?如果是这样,其背后的逻辑是什么?

var pro = function(a){
...
}

pro(5)(3);

最佳答案

var pro = function(a) { return function(b) { return a * b; } };
console.log(pro(5)(3));  // 15

基本上,如果一个函数的返回值本身就是一个函数,那么您可以转身并立即在同一个表达式中调用返回的函数;这就是那个语法的意思。您还可以使用中间变量:

var times5 = pro(5);
console.log(times5(3)); // 15

在上面的例子中,结果和你像这样直接定义 times5 是一样的:

function times5(b) { return 5 * b; }

函数返回函数有很多应用;通常,在传递给其他函数等的表达式中使用函数作为常规值称为 Higher-order programming .作为 Javascript 中的一个实际问题,在动态创建网页元素或将网页元素与操作函数相关联时,您经常必须这样做;调用返回函数的函数可以确保每个函数都有自己唯一的变量,避免由于 var 作用域的限制而发生的重用。

在其他一些语言中,当您向函数传递的参数太少时,它会自动返回另一个函数,该函数将在传递其余参数时完成工作。这叫做 curryingHaskell Curry 之后,并在 the language given his other name ,这实际上是编写多参数函数的唯一方法:编写一个返回函数的函数,该函数返回一个函数...接受最后一个参数并返回结果。

关于javascript - 在 javascript 中,我们可以调用一个函数作为 functionName(5)(3); 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29254038/

相关文章:

javascript - 我有两个数组,想通过 post 方法连接和发送数据

javascript - JS Hangman - 在数组中处理多词答案

javascript - 无法添加属性_tracking,对象不可扩展

javascript - 使用 javascript 删除 iframe

javascript - 在 Javascript 中对特殊字符进行排序 (Æ)

javascript - 有 NETWORK_ERR 和 less.js

javascript - 当列表变长时,选择下拉列表无法正确显示

javascript - list 更改时 Html5 缓存不更新

javascript - 使 img 标签完全填充页面而不创建滚动条

javascript - 如何在不编辑 HTML 文件的情况下使用 AngularJS 更改 HTML 中的 img src?