你能用 JavaScript 编写嵌套函数吗?

我想知道 JavaScript 是否支持在另一个函数中编写函数,或者支持嵌套函数(我在博客中读到过)。这真的可能吗?.事实上,我已经使用了这些,但不确定这个概念。我真的不明白这一点-请帮助!

214684 次浏览

下面的代码令人讨厌,但是它演示了如何像对待其他类型的对象一样对待函数。

var foo = function () { alert('default function'); }


function pickAFunction(a_or_b) {
var funcs = {
a: function () {
alert('a');
},
b: function () {
alert('b');
}
};
foo = funcs[a_or_b];
}


foo();
pickAFunction('a');
foo();
pickAFunction('b');
foo();

这真的可能吗。

是的。

function a(x) {    // <-- function
function b(y) { // <-- inner function
return x + y; // <-- use variables from outer scope
}
return b;       // <-- you can even return a function.
}
console.log(a(3)(4));

函数是第一类对象,可以是:

  • 在函数中定义
  • 就像在函数的任何点上创建其他变量或对象一样
  • 从函数返回(在上面两个函数之后,这一点似乎显而易见,但仍然如此)

以肯尼的例子为基础:

   function a(x) {
var w = function b(y) {
return x + y;
}
return w;
};


var returnedFunction = a(3);
alert(returnedFunction(2));

会提醒你5。

你不仅可以把一个函数作为变量传递给另一个函数,还可以在内部使用它进行计算,在外部定义它。看这个例子:

    function calculate(a,b,fn) {
var c = a * 3 + b + fn(a,b);
return  c;
}


function sum(a,b) {
return a+b;
}


function product(a,b) {
return a*b;
}


document.write(calculate (10,20,sum)); //80
document.write(calculate (10,20,product)); //250

是的,可以编写和调用嵌套在另一个函数中的函数。

试试这个:

function A(){
B(); //call should be B();
function B(){


}
}

ES6对其他答案的替代解决方案:

const currying = (x) => (y) => x + y;
console.log(currying(5)(3));

将打印到控制台: 8

function calculate(num1) {
// arrow function
return (num2) => num1 + num2;
}


// Invoke the function
console.log(calculate(4)(6));

这真的可能吗?

很有可能。由于 javascript 是第一类函数编程语言,所以可以用它来处理任何函数。

function add(x, y) {
// we can define another function inside the add function to print our answer
function print(ans) {
console.log(ans)
}
const ans = x + y
print(ans)
return ans
}


add(1, 2)