为什么不是';下面的JavaScript函数不是闭包吗?

为什么不是';下面的JavaScript函数不是闭包吗?,javascript,closures,Javascript,Closures,var x=5; 函数f0(){ 返回函数(){ 变量y=10; var z=x+y; console.log('x+y为:'+z); } } var myFunc=f0(); myFunc(); x=10; myFunc()我将在开始时稍微离题一点,以明确闭包的概念。 在C++语言中,函数返回局部变量是不好的,除非在Heop.上分配它们。 例如: x foo() { x obj; return obj; } cout<< foo() << endl;

var x=5;
函数f0(){
返回函数(){
变量y=10;
var z=x+y;
console.log('x+y为:'+z);
}
}
var myFunc=f0();
myFunc();
x=10;

myFunc()我将在开始时稍微离题一点,以明确闭包的概念。 在C++语言中,函数返回局部变量是不好的,除非在Heop.</P>上分配它们。 例如:

 x foo() {
   x obj;
   return obj;
 }

 cout<< foo() << endl;
xfoo(){
x obj;
返回obj;
}
库特
是因为从
f0
返回的不是闭包吗

不是。在JavaScript中,每个函数都是一个闭包

这是因为闭包没有记录它返回到的作用域中变量的值吗


对。闭包不记录值,而是获取当前状态的快照。它只是记录对范围的引用。这是它定义的范围,而不是它返回的范围。

也许你想先看看这个问题:也可以参考这个关于标记Javascript(关于闭包)的投票最多的问题:不,它不是“拍摄快照”。你从哪里得到这个想法的?上限仍然存在,因为有一个引用它的闭包,对吗?这是否意味着如果我使用
var myFunc1=f0()创建多个闭包
var myFunc2=f0()等,那么这是否意味着每个闭包的作用域都是重复的?是的,确切地说,每个
f0()
函数调用都会创建一个各自闭包将保留的作用域。虽然在您的示例中,
f0
范围中实际上没有任何变量,但关闭的是带有
var x
(稍后修改)的全局范围。