js 的 eval 與閉包

若在閉包所屬的函數中有用到 eval, 則可以由此存取閉包內的所有變數。 雖然我不懂 js 的底層是如何運作閉包的, 但至少不是 只包入有用到的變數 , 而是把整個環境都包入。

let f
{
    let s = 'abc'
    let i = 0
    let a = []
    let o = {}
    f = (code) => eval(code)
}
typeof f('o') // object