我有一个使用我想测试的匿名函数的代码。代码遵循以下结构(所有功能都在一个大地图中)。f2
但是,当我将匿名函数重构为更大函数之外的单独函数时hello3
,值不会像我预期的那样传递。为什么会这样?我可以将值作为参数传递,但我也想了解基本原理。
var bigMap = {
f2: function() {
console.log("Closed over:" + name);
},
hello1: function(name) {
return function() {
console.log("Closed over:" + name);
};
},
hello2:function(name) {
var f1 = function() {
console.log("Closed over:" + name);
};
return f1;
},
hello3:function(name) {
return this.f2;
}
};
var f = bigMap.hello1("asad");
f(); // Outputs> Closed over:asad
f = bigMap.hello2("asad");
f(); // Outputs> Closed over:asad
f = bigMap.hello3 ("asad");
f(); // Outputs> Closed over: