0

これはJavaScriptのクロージャですか?

var test = function(b){
    var a = 1;
    return function(b){
        a + b
    }
};
var c = test(2);
4

4 に答える 4

2

クロージャが導入されたら、テスト関数のローカルプロパティを返す関数をテスト内で定義します。クロージャの例は次のとおりです。

;(function() {

    var local = 123

    window.foo = function() {
        return local
    }
})()

この例で非常に近いのはカリー化です。これには、2番目のパラメーターを受け取る関数を返す関数が含まれます。例えば:

function add(a) {
    return function(b) {
        return a + b;
    }
}

add(5)(6) // 11
于 2013-02-28T14:48:13.650 に答える
0

変数 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);
于 2013-02-28T15:29:42.753 に答える
0

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 変数 に代入しています。内部関数を直接使用することはできません。上記のコードは関数を返すため、外部関数を呼び出してそれらの戻り値を変数に代入する必要があります

于 2018-09-12T02:51:46.653 に答える