【问题标题】:Javascript: how to print return value of function?Javascript:如何打印函数的返回值?
【发布时间】:2019-02-18 03:53:29
【问题描述】:

我是 Javascript 的初学者,正在阅读“面向 Web 开发人员的 JS”一书的闭包和变量部分。举了两个例子:

function Func1() {
    var result = new Array();
    for (var i=0; i < 10; i++){
        result[i] = function() {
           console.log('i:'+i);
           return i; 
        };
    }

    return result;
}

console.log(Func1());

function Func2() {
    var result = new Array();

    for(var i=0; i < 10; i++){
        result[i] = function(num) {
            return function() {
                console.log('num:'+num);
                return num;
            };
        }(i);
    }

    return result;
}

console.log(Func2());

在书的描述中,在func1中,每个函数都可以返回10,而在func2中,每个函数都会返回不同的数字。但是当我运行代码时,它实际上返回:

[ [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function] ]

对于这两个功能。

那么如何打印出每个函数的实际值呢?以及为什么“console.log('i:'+i);”没有在第一个函数中打印?

【问题讨论】:

  • 要打印函数的返回值,你必须先调用它。例如。 var arr = Func1(); arr[3]();
  • @L.L 您需要包装该函数以便调用。当前,您正在为变量分配一个函数。您想要调用该函数并将结果返回到变量中。检查下面的示例。
  • var fncs = Func1(); console.log(fncs[0]()); console.log(fncs[1]())

标签: javascript function return-value


【解决方案1】:

尝试将您的结果 [i] 数据包装到调用的函数中以获取您需要的数据...

检查一下:

function Func1() {
    var result = new Array();
    for (var i=0; i < 10; i++){
        result[i] = (function() {
           console.log('i:'+i);
           return i; 
        })();
    }

    return result;
}

console.log(Func1());

【讨论】:

  • 现在我可以得到函数的值了。但是现在 func1 和 func2 得到相同的结果? [0,...,9]。你知道为什么吗?
  • 你期待什么结果?
  • 在本书的描述中,第一个函数应该为每个函数返回 10。第二个函数应该为每个函数返回 0-9。但现在这两个函数都返回 [0,...,9]。
【解决方案2】:

您在 for 循环中返回一个函数,而应该只返回闭包内的值。

function Func2() {
    var result = new Array();

    for(var i=0; i < 10; i++){
        result[i] = function(num) {
            console.log('num:'+num);
            return num;
        }(i);
    }

    return result;
}

console.log(Func2());

【讨论】:

    【解决方案3】:

    给定函数执行的当前输出,一个Array的函数,你可以迭代FuncN的结果然后在数组的每个元素处执行函数

    for (let n = 0, f = Func1(); n < f.length; n++) {
      console.log(f[n]())
    }
    

    【讨论】:

    • console.log(f[n])?否则提示f is not function。
    • @L.L 不。没有重新编写问题的代码。答案处的代码执行数组中的每个函数并将结果打印到console
    • 谢谢,通过这种方式,我可以得到func1中每个函数的全部10个。
    【解决方案4】:

    像这样尝试它们:

    function Func1() {
        var result = new Array();
        for (var i=0; i < 10; i++){
            result[i] = function() {
               console.log('i:'+i);
               return i; 
            }();
        }
    return result;
    
    }
    
    console.log(Func1());
    
    function Func2() {
        var result = new Array();
    
        for(var i=0; i < 10; i++){
            result[i] = function(num) {
                return function() {
                    console.log('num:'+num);
                    return num;
                }();
            }(i);
        }
    
        return result;
    }
    
    console.log(Func2());
    

    问题在于您已将函数设置为返回值,而不是调用它然后返回。

    【讨论】:

    • 现在我可以得到函数的值了。两个函数都返回 [0,...,9]。但是在本书的描述中,第一个函数应该为每个函数返回 10。第二个函数应该为每个函数返回 0-9。你知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2020-01-29
    • 2015-12-01
    • 2018-08-28
    • 2020-01-26
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多