我需要在方法中比较当前整数与先前的整数。看起来像这样的东西应该可以工作,但事实并非如此。有人能告诉我问题在哪里吗?注意电流设置在方法之外。如何在JavaScript中跟踪方法中以前的值?
myMethod : function() {
var previous;
if (current > previous) {
// do this!
}
previous = current;
}
我需要在方法中比较当前整数与先前的整数。看起来像这样的东西应该可以工作,但事实并非如此。有人能告诉我问题在哪里吗?注意电流设置在方法之外。如何在JavaScript中跟踪方法中以前的值?
myMethod : function() {
var previous;
if (current > previous) {
// do this!
}
previous = current;
}
每次调用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
传递给该函数时可能会更好。
你能举一个例子说明你将如何使用第一个想法吗? – 1252748 2017-01-31 00:40:45
你只需要保持状态。
var previousState = 'something';
function myMethod(current)
{
if(current > previousState)
// Do Something
previousState = current;
}
好像你正试图实现记忆功能。有一个很好的教程,如何去关于它here。
哪里是当前定义的?你是什么意思“它不” – 2011-05-04 15:39:03