Javascript 匿名函数绑定到当前变量而不是初始变量

Javascript 匿名函数绑定到当前变量而不是初始变量,javascript,anonymous-function,Javascript,Anonymous Function,编辑:有人建议我的问题是一个问题。然而,他们最终将解决方案存储在一个全局数组中,而我不是。我正试图让关闭自己的工作。从其他的例子来看,这看起来应该很容易,但由于某种原因,这对我来说并不是一件容易的事,我肯定错过了什么 我正在制作一个网页,帮助玩家在第三方规则集“Pathfinder的战争路径”中跟踪机动 在这个阶段,我试图做的是我有两个列表(基于),当你从一个列表中删除一个项目时,它会出现在另一个列表中。这就是我计划展示可用机动对抗扩展机动的方式。目前我只使用字符串,但最终计划使用包含更多信息的

编辑:有人建议我的问题是一个问题。然而,他们最终将解决方案存储在一个全局数组中,而我不是。我正试图让关闭自己的工作。从其他的例子来看,这看起来应该很容易,但由于某种原因,这对我来说并不是一件容易的事,我肯定错过了什么

我正在制作一个网页,帮助玩家在第三方规则集“Pathfinder的战争路径”中跟踪机动

在这个阶段,我试图做的是我有两个列表(基于),当你从一个列表中删除一个项目时,它会出现在另一个列表中。这就是我计划展示可用机动对抗扩展机动的方式。目前我只使用字符串,但最终计划使用包含更多信息的对象

所以我现在有两个列表,我可以在它们之间发送元素。然而,这种行为是不正确的。最后创建的元素(在本例中为字符串“forth”)在“first”、“second”和“third”字符串上被覆盖。我确信这样做的原因是因为匿名函数正在使用这个变量,而上次它的set是用forth设置的,这解释了为什么这个值被覆盖。另一个问题是它并不总是出现在正确的列表中

我尝试过绑定和创建新的局部变量,这会导致它停止工作或没有更改。我完全有可能误用了它们

那么,如何创建匿名函数来存储激活时要使用的原始值呢

// Create a "close" button and append it to each list item
var myNodelist = document.getElementsByTagName("LI");
var i;
for (i = 0; i < myNodelist.length; i++) {
var span = document.createElement("SPAN");
var txt = document.createTextNode("\u00D7");
span.className = "close";
span.appendChild(txt);
myNodelist[i].appendChild(span);
}

// Click on a close button to hide the current list item
var close = document.getElementsByClassName("close");
var i;
for (i = 0; i < close.length; i++) {
close[i].onclick = function() {
var div = this.parentElement;
div.style.display = "none";
}
}

function falseElement(newfe) 
{
var li = document.createElement("li");
var inputValue = newfe; //document.getElementById("myInput").value;
var t = document.createTextNode(inputValue);
li.appendChild(t);
document.getElementById("myUL").appendChild(li);

var span = document.createElement("SPAN");
var txt = document.createTextNode("\u00D7");
span.className = "close";
span.appendChild(txt);
li.appendChild(span);

for (i = 0; i < close.length; i++) {
close[i].onclick = function() {
//anonymous function is the name of this type of function https://www.w3schools.com/js/js_function_definition.asp
secondelement(newfe);
var div = this.parentElement;
div.style.display = "none";
}
}
}
function secondelement(newe)
{
 var li = document.createElement("li");
 var inputValue = newe; //document.getElementById("myInput").value;
 var t = document.createTextNode(inputValue);
 li.appendChild(t);
 document.getElementById("expended").appendChild(li);

 var span = document.createElement("SPAN");
 var txt = document.createTextNode("\u00D7");
 span.className = "close";
 span.appendChild(txt);
 li.appendChild(span);

 for (i = 0; i < close.length; i++) {
 close[i].onclick = function() {
  falseElement(newe);
 var div = this.parentElement;
  div.style.display = "none";
 }
  }
 }

falseElement("first");
falseElement("second");
secondelement("third");
secondelement("forth");

//创建一个“关闭”按钮并将其附加到每个列表项中
var myNodelist=document.getElementsByTagName(“LI”);
var i;
对于(i=0;i




@destoryer的可能重复公认的答案是在函数外部创建数组,这对我来说不是一个解决方案。一定有更好的办法。我想使用bind,但我看到的所有示例都是针对函数的,而不是针对值的(另外,当我尝试使用bind时,我肯定是做错了什么)。我尝试在anon和false/second元素函数中使用let,但它保留了数组的原始行为,因为OP的代码中有它。您应该阅读更多。代码中的一些缩进将帮助我们帮助您。有帮助吗?