阅读本文:
http://javascriptissexy.com/understand-javascript-closures-with-ease/
我找到了一些我不了解封口的东西。
这个,例如:
String id = user.get("uid");
entity.addPart("name", new FileBody(id));
返回:
function celebrityName (firstName) {
var nameIntro = "This celebrity is ";
// this inner function has access to the outer function's variables, including the parameter
function lastName (theLastName) {
return nameIntro + firstName + " " + theLastName;
}
return lastName;
}
var mjName = celebrityName("Michael"); // At this juncture, the celebrityName outer function has returned.
// The closure (lastName) is called here after the outer function has returned above
// // Yet, the closure still has access to the outer function's variables and parameter
console.log(mjName("Jackson")); // This celebrity is Michael Jackson
console.log(mjName);
mjName("test");
但我不明白为什么如果我添加另一个封闭:
This celebrity is Michael Jackson
[Function: lastName]
我得到了这个结果:
function celebrityName (firstName) {
var nameIntro = "This celebrity is ";
// this inner function has access to the outer function's variables, including the parameter
function lastName (theLastName) {
return nameIntro + firstName + " " + theLastName;
}
function firstNameFunc (theLastName) {
return nameIntro + theLastName + " " + firstName;
}
return lastName;
}
var mjName = celebrityName("Michael"); // At this juncture, the celebrityName outer function has returned.
// The closure (lastName) is called here after the outer function has returned above
// // Yet, the closure still has access to the outer function's variables and parameter
console.log(mjName("Jackson")); // This celebrity is Michael Jackson
console.log(mjName);
mjName("test");
为什么会这样?我理解该调用返回闭包,因为它的值存储在变量中,但在第二种情况下它只返回第一个闭包。
非常感谢你!