H246802 / 30-days-challenge

30天每日打卡
4 stars 0 forks source link

day-30-声明提升 #30

Open H246802 opened 5 years ago

H246802 commented 5 years ago

以下代码输出的结果是什么?

var a = 1
function fn1 () {
  function fn3 () {
    function fn2 () {
      console.log(a)
    }
    var a
    fn2()
    a = 4
  }
  var a = 2
  return fn3
}
var fn = fn1()
fn() // 输出什么
H246802 commented 5 years ago

在 JavaScript 中,每个函数调用以及全局环境中,JavaScript 都会创建执行上下文 在执行上下文的创建阶段会确定 this 的值 创建LexicalEnvironment(词法环境)创建VariableEnvironment(变量环境) 在创建 VariableEnvironment 时,会将 var 定义的变量提升到 VariableEnvironment 中并初始化为 undefined

所以在执行 fn 时,相当于执行 fn3 在 打印 a 时 a 的值为 undefined