What are the steps this JavaScript program takes
<p>Can someone please explain the steps this program takes and the order in which they are taken in order to produce the result "false"</p>

<pre><code>function negate(func) {
  return function(x) {
    return !func(x);
  };
}
var isNotNaN = negate(isNaN);
show(isNotNaN(NaN));
</code></pre>
