2011-05-04 49 views
2

我需要在方法中比较当前整数与先前的整数。看起来像这样的东西应该可以工作,但事实并非如此。有人能告诉我问题在哪里吗?注意电流设置在方法之外。如何在JavaScript中跟踪方法中以前的值?

myMethod : function() { 
    var previous; 

    if (current > previous) { 
     // do this! 
    } 

    previous = current; 
} 
+0

哪里是当前定义的?你是什​​么意思“它不” – 2011-05-04 15:39:03

回答

4

每次调用myMethod时间,previous被重新声明(var previous)。

您有四种可能性:

(A)创建一个闭合(IMO最好的解决办法,但要看你的需求):

myMethod : (function() { 
    var previous = null; 
    return function() { 
     if (current > previous) { 
      // do this! 
     } 
     previous = current; 
    } 
}()); 

(B)设置previous作为函数对象的属性:

myMethod : function() { 
    if (current > foo.myMethod.previous) { 
     // do this! 
    } 
    foo.myMethod.previous = current; 
} 

foo.myMethod.previous = null; 

但是,这非常符合对象的命名。

(C),如果它在你的模型适合,使previous对象myMethod的属性的属性:

previous: null, 
myMethod : function() { 
    if (current > this.previous) { 
     // do this! 
    } 
    this.previous = current; 
} 

(d)类似(A),设置previous之外的某处较高范围:

var previous = null; 
// ... 
myMethod : function() { 

    if (current > previous) { 
     // do this! 
    } 
    previous = current; 
} 

这不是一个好的因为它污染了更高的范围。

没有看到更多的代码很难说,但是当您将current传递给该函数时可能会更好。

+0

你能举一个例子说明你将如何使用第一个想法吗? – 1252748 2017-01-31 00:40:45

0

你只需要保持状态。

var previousState = 'something'; 

function myMethod(current) 
{ 
    if(current > previousState) 
     // Do Something 

    previousState = current; 
} 
-1

好像你正试图实现记忆功能。有一个很好的教程,如何去关于它here