変数を本質的に非公開にすることができます。つまり、ユーザーが単純な JS インジェクションで変数を変更することは不可能になります。しかし、誰かがデバッガーで Javascript を傍受したり、クライアントとサーバー間の通信を傍受したり、その他のあらゆる種類の操作を行ったりするのを止めることはできません。
変数を非公開にするには、変数を関数内に含めてその関数を実行し、その変数を参照する関数を含む何かを返すだけです。これは と呼ばれclosure
ます。やり方はとても簡単です。
このフィドルには、counter
1 秒ごとに更新される変数 (10 秒ごとではありません。急いでいます! :-) ) とbasePoints
、現在のスコアに追加される別の変数があります。
一般に公開されているのは、basePoints 値に追加できる機能ですが、カウンターに追加できるものはありません。(デバッガーのように) JS エンジンの内部に入らずにそれを行うことはできないと思います。主なポイントは、Javascript 内でcounter
変数を更新する方法がないということです。
var app = this.app = (function() {
var counter = 0;
var basePoints = 0;
var div = document.getElementById("score");
var addPoints = function(nbr) {
basePoints += nbr;
display();
};
document.getElementById("add20").onclick = function() {
addPoints(20);
};
var display = function() {
var points = counter + basePoints;
div.innerHTML = points + " points";
};
setInterval(function() {
counter += 1;
display();
}, 1000);
return {
addPoints: addPoints
};
}());