作用域

JavaScript 作用域(scope) 跟 Execution Context 相关。

Execution Context

在每次调用函数时 interpreter 先创建一个 Execution Context,并将它放到 Execution Stack 最上面。然后执行函数代码。

在创建 Execution Context 时

了解了上面知识,想一想下例的结果

function bar() {
  return foo
  foo = 10
  function foo() {}
  var foo = 11
}
typeof bar() // ?

函数每次调用都创建一个 Execution Context。对于递归函数,资源占用大,容易导致 “Out of Stack Space” 错误。

(function foo(i) {
  if (i === 3) {
    return
  }
  else {
    foo(++i)
  }
}(0));

资料