2016-06-22 7 views
0

私はJavascriptを初めて使いこなしていますが、現在は閉鎖を理解しようとしています。多くのサイトとw3schoolsを通過した後に "プライベート "変数。 http://www.w3schools.com/js/js_function_closures.asp、私はそれの使用を理解しようとしていますが、私はいくつかのリンクを見つけましたが、私はクロージャがC++のようなプライベートアクセスをどのように達成するのかまだ分かりません。閉鎖を使用してプライベート変数を持つ方法

function Gen() { 
    var c = 0; // c is private here 
    this.next = function() {return ++c;} 
    } 
    var gen = new Gen(); 
    console.log(gen.next()); // 1 
    console.log(gen.next()); // 2 
    console.log(gen.next()); // 3 

我々は/直接c値を設定し取得することができない、我々は(エクスポートされたインタフェースを使用する必要があります:あなたが説明したとき、私はちょうど外側のスコープからinaccesible変数を宣言しています初心者

+0

(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#Emulating_private_methods_with_closures)クロージャ 編集プライベートメソッドをエミュレート]。 MDNは、W3Schoolsよりはるかに優れたリソースです。 – str

+0

W3Schoolsは利用できる唯一のリソースではありません。インターネットで適切なリソースを検索し、どちらが理にかなっているかを確認してください。これはあまりにも一般的な質問です。例:http://javascriptissexy.com/understand-javascript-closures-with-ease/ –

答えて

0

だとして、詳細に説明してくださいnext方法)。
したがって、内部カウンタ値は"private"変数でカプセル化されています。


ここで閉鎖の例ですが、意味は同じです:scope incapsulating。

function getGenerator() { 
    var c = 0; 
    return function() {return ++c; } 
} 
var a = getGenerator(); 
var b = getGenerator(); 
console.log(a()); // 1 
console.log(a()); // 2 
console.log(b()); // 1 
console.log(a()); // 3 
+0

これは閉鎖ではありません。 – str

+0

@str、 'next'関数はクロージャです、どうしてですか? –

関連する問題