Javascript 在第二个函数x2()中,为什么只在第二个函数中返回var pp?

Javascript 在第二个函数x2()中,为什么只在第二个函数中返回var pp?,javascript,closures,Javascript,Closures,有人能解释一下为什么第二个函数x2()需要返回第二个函数f()来返回变量pp?为什么不在声明后只返回pp var-pp=10; 函数x(){ var-pp=20; 返回新函数('return pp;'); } 函数x2(){ var-pp=20; 返回函数f(){ 返回pp; } 返回f; } var p1=x(); var p2=x2(); console.log(p1()); console.log(p2())不要返回函数f,而是尝试将其保留在自己的位置:例如 函数x2(){ var-p

有人能解释一下为什么第二个函数
x2()
需要返回第二个函数
f()
来返回变量
pp
?为什么不在声明后只返回
pp

var-pp=10;
函数x(){
var-pp=20;
返回新函数('return pp;');
}
函数x2(){
var-pp=20;
返回函数f(){
返回pp;
}
返回f;
}
var p1=x();
var p2=x2();
console.log(p1());

console.log(p2())不要返回函数f,而是尝试将其保留在自己的位置:例如

函数x2(){
var-pp=20;
返回函数(){
返回pp;
}
}
console.log(x2())

console.log(x2()())
在您的场景中
x2
返回一个函数,该函数保存
pp
的值,而不是函数的结果
x2
是闭包的一个例子事实上,您可以在这里阅读更多关于闭包的内容

如果您确实希望返回最初调用
x2
的结果,请进行以下更改:

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

是的,这对我来说没关系,但如果有人能解释一下这是如何工作的,以及为什么我需要返回我的变量而不仅仅是返回变量的返回函数?这之所以有效,是因为当你上次这样做时,你添加了一个名称:返回函数-->最有趣的事情是
新函数('return pp;'))
不是一个闭包,而是指向全局
pp
变量并打印10。您所说的也是可能的,但是您应该
console.log(p2)
而不是
console.log(p2())
。除非您告诉我们,否则我们无法知道函数的目的是什么
或甚至
返回20。它完全取决于您期望函数返回的内容(函数或原语值)。我想要的是例如console.log(o),其中o是全局变量,其中包含来自x2()的数据ppo这将是什么样子?类似于
o={data:20}
?我不明白预期的输出…在这种情况下,为什么不
返回pp
返回20关于这个问题?我认为这个例子是关于对这个概念的理解。但如果它是在某处使用@trincot的实际代码,我100%同意:)