【问题标题】:Can you write nested functions in JavaScript?你能用 JavaScript 编写嵌套函数吗?
【发布时间】:2010-07-09 12:19:39
【问题描述】:

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

【问题讨论】:

    标签: javascript function nested


    【解决方案1】:

    真的可以吗。

    是的。

    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) { //
    • 那么函数是一种对象吗?对不起死灵
    【解决方案2】:

    以下内容令人讨厌,但用于演示如何将函数视为任何其他类型的对象。

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

    【讨论】:

    • 很好的例子。我要补充一点,重要的是要注意,在其他函数中定义的函数只存在于该函数范围内(当然,除非您为它分配了一个全局函数,如本例所示)。
    • 将这些函数视为对象
    【解决方案3】:

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

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

    以 Kenny 给出的示例为基础:

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

    会用 5 提醒您。

    【讨论】:

    • 这种方法称为柯里化。
    【解决方案4】:

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

    试试这个:

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案6】:

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

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

        将打印到控制台:8

        【讨论】:

        【解决方案7】:
        function calculate(num1) {
           // arrow function
           return (num2) => num1 + num2;
        }
        
        // Invoke the function
        console.log(calculate(4)(6));
        

        【讨论】:

          猜你喜欢
          • 2021-06-15
          • 2011-07-17
          • 2011-09-07
          • 1970-01-01
          • 2010-09-27
          • 2011-04-09
          相关资源
          最近更新 更多