在JavaScript中每次调用父对象时重新定义嵌套函数的变量?

时间:2014-04-16 06:14:44

标签: javascript scope nested

我在另一个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) { }

但这些都没有奏效。

2 个答案:

答案 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;
}