ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript クロージャの例の説明_javascript スキル

JavaScript クロージャの例の説明_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 16:51:421081ブラウズ

この利点は、内部関数が、それらが定義されている外部関数のパラメーターと変数にアクセスできることです。

まず、単純なオブジェクトを構築しましょう。

コードをコピー コードは次のとおりです:

var testObj = {
値: 10,
追加: function(inc){
this.value = (typeof inc === "number") ? inc : 1;
}
};

testObj.add();
testObj.value; // 11

testObj.add(2);
testObj.value; // 13


この方法では、値が不正に変更されないことが保証されません。次のように 。
コードをコピー コードは次のとおりです。

var testObj = (function(){
var value = 10;
return {
add: function(inc){
value = (typeof inc === "number") inc : 1;
},
getValue: function (){
戻り値;
testObj.add();
testObj.getValue(); // 11
testObj.add(2);

testObj.getValue(); // 13

通常、関数を呼び出して testObj の値をオブジェクトに返します。変数はここで定義されており、add メソッドと getValue メソッドで常に使用できますが、関数のスコープにより他のプログラムからは見えなくなります。同時に、内部関数のライフサイクルが外部関数よりも長いという結論も引き出す​​ことができます。


コンストラクター呼び出しの例を続けて見てみましょう。



コードをコピー

コードは次のとおりです。var MyObj = function(str){ この .status = str;
};

MyObj.prototype.getStatus = function(){
return this.status;
};

var obj = new MyObj("javascript");
obj.getStatus(); // "javascript"

これを書くことに問題はありませんが、少し「不要」になります。 「なぜですか? 直接アクセスできるプロパティに getStatus メソッドを使用してアクセスするのはどうですか?もちろん、それが意味をなすのは、地位が私有財産である場合に限られます。




コードをコピー
コードは次のとおりです。var obj = function(status){ return {
getStatus: function(){
return status;
}
};
};

var myObj = obj("javascript");
myObj.getStatus(); // "javascript"
ここで obj を呼び出すと、 getStatus メソッドを含む新しいオブジェクトが返されます。オブジェクトへの参照は myObj に保存されます。obj が返された場合でも、getStatus メソッドは引き続き obj オブジェクトの status 属性にアクセスする特権を享受します。 getStatus メソッドはパラメータのコピーにはアクセスせず、パラメータ自体にアクセスします。これが可能になるのは、関数が作成されたコンテキスト (クロージャと呼ばれる) にアクセスできるためです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。