Во второй функции x2 () зачем возвращать var pp только во второй функции? - PullRequest
0 голосов
/ 29 декабря 2018

Может кто-нибудь объяснить мне, почему вторая функция x2() должна быть возвращена второй функции f(), чтобы вернуть нашу переменную pp?Почему бы не работать только вернуть pp после объявить это?

var pp = 10;

function x() {
  var pp = 20;
  return new Function('return pp;');
}

function x2() {
  var pp = 20;
  return function f() {
    return pp;
  }
  return f;
}

var p1 = x();
var p2 = x2();
console.log(p1());
console.log(p2());

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

В вашем сценарии x2 возвращает функцию, которая содержит значение для pp вместо результата функции.x2 является примером замыканий на самом деле, вы можете прочитать больше о них здесь Javascript Closures

Если вы действительно хотите вернуть результат из начального вызова x2, сделайтеэто изменение:

function x2() {
  var pp = 20;
  function f() {
    return pp;
  }
  return f();
}
0 голосов
/ 29 декабря 2018

Вместо того, чтобы возвращать функцию f, попробуйте оставить ее отдельно: например,

function x2() {
        var pp = 20;
        return function () {
            return pp;
        }
    }
console.log(x2())
console.log(x2()())

Это позволяет x2 () () работать, если вы к этому стремитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...