function foo () { var a = undefined if (false) { a = 2 } console.log('a:', a) }
foo()
rabbbit
2018-11-22 19:41:12 +08:00
js 在进入函数时时会把 var 声明的变量提升到顶部
function 中的所有 var 变量, function 声明的函数, 传进来的参数都会绑定到一个 Environment Record 上 执行函数内部代码前,有一步叫 Declaration Binding Instantiation http://ecma-international.org/ecma-262/5.1/#sec-10.5 注意步骤 8,遍历代码,把所有 var 参数名绑定到 Environment Record,赋值为 undefined