Javascript: как напечатать возвращаемое значение функции? - PullRequest
0 голосов
/ 18 февраля 2019

Я новичок в Javascript и читаю часть Closures and Variables книги "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);"не печатается в первой функции?

Ответы [ 4 ]

0 голосов
/ 18 февраля 2019

Попробуйте их так:

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 голосов
/ 18 февраля 2019

Вы возвращаете функцию в цикле 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());
0 голосов
/ 18 февраля 2019

Учитывая текущий результат выполнения функции, Array функций, вы можете повторить результат FuncN и затем выполнить функцию для каждого элемента массива

for (let n = 0, f = Func1(); n < f.length; n++) {
  console.log(f[n]())
}
0 голосов
/ 18 февраля 2019

Попробуйте обернуть данные вашего результата [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());
...