我正在努力理解JavaScript中的透明模块模式。以下代码片段中的两件事让我感到困惑。
var Child = function () {
var totalPoints = 100;
addPoints = function (points) {
totalPoints += points;
return totalPoints;
};
getPoints = function () {
return totalPoints;
};
return {
points: totalPoints,
addPoints: addPoints
};
};
$(function () {
var george = Child();
console.log(george.points);
console.log(george.addPoints(50));
console.log(george.points);
});
这里在控制台上打印的三个值分别是100、150和100。这告诉我,当我使用一个值调用“addPoints”函数时,变量totalPoints没有被更新。如果我在addPoints函数中检查totalPoints的值,它已经正确地被增加了。发生了什么事情?
如果我使用控制台检查window.addPoints或window.getPoints,我会发现因为我没有在函数声明前面使用“var”,它们已经被添加到全局作用域中。这难道不是错误的吗?我看到的大多数例子都这样做。
非常感谢任何指导。