为什么其中一个是结束,而不是另一个?Javascript
我一直在阅读JS中的闭包,我不会说我完全理解它,但至少在阅读了一些来自不同站点的示例和信息后,我对它有了一些了解,但我真的不明白为什么其中一个是闭包而不是另一个 非闭合函数为什么其中一个是结束,而不是另一个?Javascript,javascript,function,closures,Javascript,Function,Closures,我一直在阅读JS中的闭包,我不会说我完全理解它,但至少在阅读了一些来自不同站点的示例和信息后,我对它有了一些了解,但我真的不明白为什么其中一个是闭包而不是另一个 非闭合函数 var secret = "007"; function getSecret(){ var secret = "008"; function getValue(){ return secret; } return getValue(); } getSecret();
var secret = "007";
function getSecret(){
var secret = "008";
function getValue(){
return secret;
}
return getValue();
}
getSecret();
var secret = "007";
function getSecret(){
var secret = "008";
function getValue(){
return secret;
}
return getValue;
}
var getValueFun = getSecret();
getValueFun();
关闭功能
var secret = "007";
function getSecret(){
var secret = "008";
function getValue(){
return secret;
}
return getValue();
}
getSecret();
var secret = "007";
function getSecret(){
var secret = "008";
function getValue(){
return secret;
}
return getValue;
}
var getValueFun = getSecret();
getValueFun();
这两个函数都有相同的输出,因为我可以意识到第一个不是闭包的函数返回调用的函数,而闭包函数只返回函数。这是我能想到的唯一区别,也是其中一个是闭包而不是另一个的部分原因吗?//您可以尝试以下方法:
var secret = "007";
function getSecret(){
var secret = "008";
var getValueFunc = function(){
return secret;
}
return {
getValue:getValueFunc
};
}
var getValueFun = new getSecret();
getValueFun.getValue();
是的,这就是关键区别。第一个返回
getValue
函数的结果-第二个返回getValue
函数本身-因此,在第二个示例中,为什么需要执行getValueFun()
获取第一个函数的结果。谁说?一个函数引用了它在其中创建的环境(或任何环境),它就是一个闭包。@Bergi说如果一个内部函数返回外部函数中的所有自由变量,它就是一个闭包,这有什么不同吗?它如何帮助理解?您不应该从使用new
调用的构造函数中返回对象。