Javascript 如何在闭包中移动DOM元素

Javascript 如何在闭包中移动DOM元素,javascript,jquery,Javascript,Jquery,我正试图使用一个闭包作为递增地移动DOM元素。最后,我想动态创建许多应该独立移动的DOM元素,这就是为什么我要在函数中定义变量 给出的答案中的示例是 var lightning = new Array(); lightning.push($(".lightning")); var l0 = -210; function thunkAdd(){ var lThis = l0; console.log('set lThis to '+ lThis); return function

我正试图使用一个闭包作为递增地移动DOM元素。最后,我想动态创建许多应该独立移动的DOM元素,这就是为什么我要在函数中定义变量

给出的答案中的示例是

var lightning = new Array();
lightning.push($(".lightning"));

var l0 = -210;

function thunkAdd(){
  var lThis = l0;
  console.log('set lThis to '+ lThis);
  return function inc() {
    console.log('lThis = '+ lThis);
    return lThis ++;
  }
  lightning[0].css("left", lThis);
  console.log('lightning[0] left = '+lightning[0].css("left"));
}

var incrementInterval = setInterval(thunkAdd(), 33);
。在控制台中查看,似乎出于某种原因,
console.log('lightning[0]left='+lightning[0].css(“left”)未运行

我尝试的另一种方法是:

var lightning = new Array();
lightning.push($(".lightning"));

var l0 = -210;
var lThis = l0;

function thunkAdd(){
  lThis ++;
  console.log('lThis = '+ lThis);

  lightning[0].css("left", lThis);
  console.log('lightning[0] left = '+lightning[0].css("left"));
}

var incrementInterval = setInterval(thunkAdd, 33);

。这将在屏幕上移动图像,但理想情况下(因为下一步是动态创建和移动许多图像),我希望在
thunkAdd
函数首次运行时在其内部定义变量
lThis
,然后如果定义了,则增加该变量并使用
lThis
变量移动图像。如何执行此操作?

如注释中所述,返回后的代码将不会执行,因此您永远不会更改元素的css left属性,而只更改增量变量

您需要移动
lightning[0].css(“左”,lThis)正在间隔执行的内部闭包

你也可以考虑使用jQuery代替这个(你也可以用很多元素或者在循环中这样做)


$(“.lightning”).animate({left:'2000px'},10000,'linear')

返回函数inc(){}
之后的所有内容都不会运行,因为您已使用
返回退出该函数。