你可以在JavaScript中编写嵌套函数吗?

我想知道如果JavaScript支持在另一个函数内编写函数,或者嵌套函数(我在博客中阅读)。 这真的有可能吗? 事实上,我已经使用了这些,但我不确定这个概念。 我真的不清楚,请帮忙!

这真的可能吗?

是。

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)); 

以下是讨厌的,但是用来演示如何像其他types的对象一样对待函数。

 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
  • 像任何其他variables或对象一样在您的函数的任何点创build
  • 从你的函数返回(这可能看起来很明显,但仍然是)

build立在Kenny给出的例子上:

  function a(x) { var w = function b(y) { return x + y; } return w; }; var returnedFunction = a(3); alert(returnedFunction(2)); 

会提醒你5。

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

尝试这个:

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

您不仅可以将已经传递给另一个函数的函数作为variables返回,还可以将其用于内部计算,但在外部进行定义。 看到这个例子:

  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