你可以使變量本質上是私有的,這意味着用戶不可能通過普通的JS注入來改變它們。但是這不會阻止某人用調試器攔截你的Javascript,攔截你在客戶端和服務器之間的通信,或者做其他各種各樣的搗蛋。
要創建一個變量private,只需將其包含在一個函數中,執行該函數並返回包含引用該變量的函數的內容。這被稱爲closure
。這很容易做到。
在this fiddle有一個counter
變量是每秒更新(每十秒鐘不 - 我有急事:-)!)和另一個變量,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
};
}());
你應該試圖限制變量的範圍,而不是阻止代碼注入。 – TheZ 2012-07-17 20:04:53
機會是你的JavaScript已經使它不可能爲我注入一個新的值到一個函數,因爲它不會在該函數之外可用,但我們永遠不會知道,因爲你沒有包含任何代碼... – 2012-07-17 20:06:27