多个闭包,相同的函数不同的名称,set()更改所有值

时间:2013-12-26 22:06:38

标签: javascript closures

我非常相似地声明了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);

我有两个问题:为什么要这样做?我怎么能阻止它?

谢谢!

1 个答案:

答案 0 :(得分:1)

你自己使用_v因此它变成了一个全局变量。你需要var _v