これはJavaScriptのクロージャですか?
var test = function(b){
var a = 1;
return function(b){
a + b
}
};
var c = test(2);
これはJavaScriptのクロージャですか?
var test = function(b){
var a = 1;
return function(b){
a + b
}
};
var c = test(2);
クロージャが導入されたら、テスト関数のローカルプロパティを返す関数をテスト内で定義します。クロージャの例は次のとおりです。
;(function() {
var local = 123
window.foo = function() {
return local
}
})()
この例で非常に近いのはカリー化です。これには、2番目のパラメーターを受け取る関数を返す関数が含まれます。例えば:
function add(a) {
return function(b) {
return a + b;
}
}
add(5)(6) // 11
変数 a; および外側の関数のパラメーター b は、内側の関数のクロージャーの一部です。閉鎖の詳細な説明については、FAQをご覧ください。
var test = function(b){ // <= param b is part of the closure of the inner function
var a = 1; // <= a is part of the closure of the inner function as well
return function(b){ // <= the inner function
a + b // <= here you are just add ind a and b together
// return a + b; //would be more appropriate
}
};
var c = test(2);
var globalVar = "xyz";
function outerFunc(outerArg) {
var outerVar = 'a';
var r3= function innerFunc(innerArg) {
var innerVar = 'b';
console.log(
"outerArg = " + outerArg + "\n" +
"innerArg = " + innerArg + "\n" +
"outerVar = " + outerVar + "\n" +
"innerVar = " + innerVar + "\n" +
"globalVar = " + globalVar);
};
return r3;
};
var r=outerFunc(123);
r(456);
var r=outerFunc(123); ...ここでは、outer-function を呼び出し、この結果の戻り値を r 変数 に代入しています。内部関数を直接使用することはできません。上記のコードは関数を返すため、外部関数を呼び出してそれらの戻り値を変数に代入する必要があります