test函数执行完为什么num变量没有被释放, setInterval中的num为什么不是输出undefined?

function test() {  
    let num = 123;  
  setInterval(function () {  
        console.log(num);  
  }, 1000);  
  console.log('over');  
}  
  
test();  
console.log('over again');

我原以为输出over和over again后,会每隔一秒输出一个undefined, 实际上却输出123 ?

阅读 3k
4 个回答

学习一下闭包吧,很明显的一个闭包。

因为setInterval里用到这个num了,所以它并不会被释放。

let语句声明是一个块级作用域的本地变量。
因为你用到num了,所以JavaScript就不会把这个变量释放啊。

推荐问题