我需要将当前整数与方法中的前一个整数进行比较。似乎这样的事情应该有效,但事实并非如此。有人能告诉我问题所在吗?注意电流设置在方法之外。
myMethod : function() {
var previous;
if ( current > previous ) {
// do this!
}
previous = current;
}
答案 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。