Может кто-нибудь объяснить мне, почему вторая функция x2() должна быть возвращена второй функции f(), чтобы вернуть нашу переменную pp?Почему бы не работать только вернуть pp после объявить это?
x2()
f()
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());
В вашем сценарии x2 возвращает функцию, которая содержит значение для pp вместо результата функции.x2 является примером замыканий на самом деле, вы можете прочитать больше о них здесь Javascript Closures
x2
Если вы действительно хотите вернуть результат из начального вызова x2, сделайтеэто изменение:
function x2() { var pp = 20; function f() { return pp; } return f(); }
Вместо того, чтобы возвращать функцию f, попробуйте оставить ее отдельно: например,
function x2() { var pp = 20; return function () { return pp; } } console.log(x2()) console.log(x2()())
Это позволяет x2 () () работать, если вы к этому стремитесь.