如何在JavaScript中跟踪方法中的先前值?

时间:2011-05-04 15:35:42

标签: javascript variables methods

我需要将当前整数与方法中的前一个整数进行比较。似乎这样的事情应该有效,但事实并非如此。有人能告诉我问题所在吗?注意电流设置在方法之外。

myMethod : function() {
    var previous;

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

    previous = current;
}

3 个答案:

答案 0 :(得分:4)

每次致电myMethod时,previous都会被重新宣布(var previous)。

您有四种可能性:

(A)创建一个闭包(最佳解决方案,但取决于您的需求):

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

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

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

答案 1 :(得分:0)

你只需要保持状态。

var previousState = 'something';

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

    previousState = current;
}

答案 2 :(得分:-1)

好像你正在尝试实现一个memoization功能。有一个关于如何实现它的好教程here