Javascript:如何打印函数的返回值?

时间:2019-02-18 03:53:29

标签: javascript function return-value

我是Java语言的初学者,请阅读“面向Web开发人员的JS”一书中的Closures和Variables部分。它给出了两个示例:

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);”没有在第一个功能中打印?

4 个答案:

答案 0 :(得分:2)

尝试将结果[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());

答案 1 :(得分:1)

您要在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());

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

像这样尝试它们:

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

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