テストしたい無名関数を使用するコードがあります。コードは次の構造に従います (すべての関数は大きなマップにあります)。ただし、匿名関数を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: