你可以使变量本质上是私有的,这意味着用户不可能通过普通的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