我非常相似地声明了5个闭包:
_nameFilter = (function () { _v = ""; return {"set": function(v) {_v = v;},"get": function() {return _v;}};})();
_dateFilter = (function () { _v = ""; return {"set": function(v) {_v = v;},"get": function() {return _v;}};})();
_dateStartFilter = (function () { _v = ""; return {"set": function(v) {_v = v;},"get": function() {return _v;}};})();
_dateEndFilter = (function () { _v = ""; return {"set": function(v) {_v = v;},"get": function() {return _v;}};})();
_friendFilter = (function () { _v = ""; return {"set": function(v) {_v = v;},"get": function() {return _v;}};})();
_creatorFilter = (function () { _v = ""; return {"set": function(v) {_v = v;},"get": function() {return _v;}};})();
TLDR:5个闭包,包含一个内部变量和一个get()和set()方法。
然后我将每个函数传递给一个任意函数,并尝试根据HMTL中的表单单独设置()它们。但是,每当我更改一个,它都会改变它们。
这是一个更复杂功能的伪代码,但这是重要的部分。
function setFilter(filterVar, fieldID) {
filterVar.set($(fieldID).val());
console.log(_nameFilter); // Both (and all) of these variables are being set
console.log(_dateFilter); // to the same value of the fieldID of _nameFilter.
}
setFilter(_nameFilter);
我有两个问题:为什么要这样做?我怎么能阻止它?
谢谢!
答案 0 :(得分:1)
你自己使用_v因此它变成了一个全局变量。你需要var _v