您可以使变量本质上是私有的,这意味着用户不可能通过普通的 JS 注入来更改它们。但这不会阻止某人使用调试器拦截您的 Javascript,拦截您在客户端和服务器之间的通信,或进行各种其他摆弄。
要将变量设为私有,只需将其包含在函数中,执行该函数,然后返回包含引用该变量的函数的内容。这称为closure
. 这很容易做到。
在这个小提琴中,有一个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
};
}());