我在另一个JavaScript函数中有一个嵌套函数;嵌套函数接受传递给父级的变量。我第一次调用父项时,所有变量都设置正确。但是,无论后来我称之为父对象,嵌套函数都不会应用传递给父对象的新变量(而是从第一次调用中保留变量)。
例如:
myFunc: function(path, points) {
var onDrag = function(e) {
// This is the variable I want redefined each time I
// call myFunc with new points
console.log('points: ', points);
},
onDragStart = function(e) {
window.addEventListener('mousemove', onDrag);
};
this.el.addEventListener('mousedown', onDragStart);
return this;
}
以上是我方法的精简版。我在创建元素时调用myFunc
,并且您可以看到onDrag
在元素上调用mousedown
。但是,我也会在脚本后面的几个点直接调用myFunc
,为路径和点传递新变量,期望onDrag
对这些变量的引用进行更新。
然而,这并没有发生,相反onDrag会在我第一次调用它时保持点变量。
每次调用其父级时,如何让嵌套函数更新它的变量?
我尝试过的事情:
我已经尝试将点作为参数传递给onDrag
,如下所示:
onDrag = function(e, points) { }
我尝试在onDrag范围内重新定义变量,如下所示:
onDrag = function(e) { var pts = points; }
我试过不在变量中定义函数,如下所示:
function onDrag(e) { }
但这些都没有奏效。
答案 0 :(得分:1)
如果再次调用“myFunc”,它将再次附加在窗口对象上添加新的eventListner。 您需要先从窗口中删除以前附加的事件。
window.removeEventListener('mousemove',onDrag,false);
答案 1 :(得分:0)
您需要在调用它时将参数传递给onDrag。
myFunc: function(path, points) {
var onDrag = function(e, points) {
// This is the variable I want redefined each time I
// call myFunc with new points
console.log('points: ', points);
},
onDragStart = function(e, points) {
window.addEventListener('mousemove', onDrag(e, points));
};
this.el.addEventListener('mousedown', onDragStart(e, points));
return this;
}