1

自己呼び出し関数がプライベート値を保持しているのに、他のタイプが保持されていない理由を理解しようとしています。

価値を高めますか

var a = function(){
    var myval=10;
    return function(){
          return myval++; 
    }
}();
console.log(a());
console.log(a());
console.log(a());

出力 : 10,11,12

このコードは値を増加させませんが

var a = function(){
    var myval=10;
    return function(){
          return myval++; 
    }
};
console.log(a()());
console.log(a()());
console.log(a()());

出力:10,10,10

4

2 に答える 2

2

外側の関数は、最初のケースでは 1 回だけ呼び出されますが、2 番目のケースでは 3 回呼び出され、そのたびにそのクロージャの個別myvalを 10 に初期化しています。したがって、最後に の 3 つの個別のコピーがあり、myvalそのすべてが 1 回インクリメントされることで値が 11 になります。

最初の例は、次のものと同等です。

var a = function(){
    var myval=10;
    return function(){
          return myval++; 
    }
};

var b = a();

console.log(b());
console.log(b());
console.log(b());

あなたの2番目のものは次のようなものですが:

var a = function(){
    var myval=10;
    return function(){
          return myval++; 
    }
};

var b = a();
var c = a();
var d = a();

console.log(b());
console.log(c());
console.log(d());

呼び出しa()は毎回新しい内部関数を作成するため、1 回呼び出した最初のケa​​ースでは、単一のスコープを持つ 1 つの内部関数がありますmyvalが、2 番目のケースでは、それぞれが独自myvalのスコープを持つ 3 つの別個の内部関数を作成しました。 .

于 2016-04-27T19:59:23.090 に答える