var a = 10;(function () { console.log(a) a = 5 console.log(window.a) var a = 20; console.log(a)})() 在IIFE中,定义了一个新的a,由于变量提升的原因, var a 会首先执行,于是第一个 console.log(a) 会输出 undefined ,然后输出 window.a 为 10 ,最后 a = 20 输出 20 。