Не напрямую, но вы можете создать объект-оболочку для предоставления этой функциональности.Примерная реализация выглядит примерно так:
function Timeout(fn, interval) {
var id = setTimeout(fn, interval);
this.cleared = false;
this.clear = function () {
this.cleared = true;
clearTimeout(id);
};
}
Тогда вы можете сделать что-то вроде:
var t = new Timeout(function () {
alert('this is a test');
}, 5000);
console.log(t.cleared); // false
t.clear();
console.log(t.cleared); // true
Моей первой идеей было заменить setTimeout
и clearTimeout
новыми функциями (сохранениеих старое значение в замыкании), которое изменило их аргументы, но затем я понял, что setTimeout
возвращает число, которое является примитивом (и, следовательно, передается по значению).Я подумал, что если бы я собирался возвращать не примитивы, я мог бы просто сделать объект-обертку, который обеспечил бы большую гибкость.Однако этот метод может быть похож на тот, который вам нужен - если да, я могу предоставить соответствующий код, если вам нужен пример.
Надеюсь, это поможет.