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

问题描述 投票:0回答:9

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

javascript function nested
9个回答
233
投票

这真的可能吗?

是的。

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


34
投票

下面的内容很恶心,但可以演示如何像对待任何其他类型的对象一样对待函数。

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

21
投票

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

  • 在您的函数中定义
  • 就像函数中任何其他变量或对象一样创建
  • 从你的函数返回(在上面两个之后可能看起来很明显,但仍然)

以肯尼给出的示例为基础:

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

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

会用 5 提醒您。


16
投票

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

试试这个:

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

   }
}

12
投票

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

    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

5
投票

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

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

将打印到控制台:8


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

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

0
投票

这真的可能吗?

很有可能。您可以使用 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)


0
投票

是的,JavaScript 确实支持在其他函数中编写函数,这称为嵌套函数。这个概念允许您在另一个函数的作用域内定义一个函数。这是一个例子:

在此示例中,

innerFunction
被定义在
outerFunction
的范围内。因此,
innerFunction
只能在
outerFunction
内部访问。当
outerFunction
被呼叫时,也可以呼叫
innerFunction
,但无法从外部呼叫
innerFunction
outerFunction

嵌套函数对于在特定上下文或范围内封装功能非常有用,并且它们通常在 JavaScript 中用于各种目的,例如定义辅助函数或实现闭包。

function outerFunction() {
    // Outer function scope
    console.log("This is outerFunction.");

    function innerFunction() {
        // Inner function scope
        console.log("This is innerFunction.");
    }

    // Call the inner function
    innerFunction();
}

// Call the outer function
outerFunction();

© www.soinside.com 2019 - 2024. All rights reserved.