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%同意:)