title: Why does setInterval() give a circular reference?
body: <p>Considering the following code:</p>
  
  <pre><code>let id = setInterval(function f() {console.log("Nice.");}, 1000);
  console.log(id);
  JSON.stringify(id);
  </code></pre>
  
  <p>This ends in an error on the last line saying <code>TypeError: Converting circular structure to JSON</code>. </p>
  
  <p>The <code>console.log(id)</code> gives </p>
  
  <pre><code>Timeout {
    _called: false,
    _idleTimeout: 1000,
    _idlePrev: 
     TimersList {
       _idleNext: [Circular],
       _idlePrev: [Circular],
       _timer: Timer { '0': [Function: listOnTimeout], _list: [Circular] },
       _unrefed: false,
       msecs: 1000,
       nextTick: false },
    _idleNext: 
     TimersList {
       _idleNext: [Circular],
       _idlePrev: [Circular],
       _timer: Timer { '0': [Function: listOnTimeout], _list: [Circular] },
       _unrefed: false,
       msecs: 1000,
       nextTick: false },
    _idleStart: 81,
    _onTimeout: [Function: f],
    _timerArgs: undefined,
    _repeat: 1000,
    _destroyed: false,
    [Symbol(asyncId)]: 6,
    [Symbol(triggerAsyncId)]: 1 }
  </code></pre>
  
  <p>Why does the Timeout object contain a circular reference?</p>