const/letとvarのスコープに関する覚書

function内において、varは継承(?)されるがconst/letは継承(?)されない。
関数呼び出しにおいてはどちらも継承(?)されない。

<script type="text/javascript">
(function func(){
  var _var = "  var_func";
  const _const = "  const_func";
  let _let = "  let_func";
  
  console.log(_var);     //->var_func
  console.log(_const);  //->const_func
  console.log(_let);     //->let_func
  console.log("  {");
  for(i=0;i<1;i++){
    //console.log(_var);   ->  var_func //func内のものが継承されている
    //console.log(_const); -> undefined //"for内の_const"にはまだ代入されていない
    //console.log(_let);   -> undefined //"for内の_let"にはまだ代入されていない
    
    var _var = "    var_for";
    const _const = "    const_for";
    let _let = "    let_for";
    
    console.log(_var);    //->var_for
    console.log(_const);  //->const_for
    console.log(_let);    //->let_for
  };
  console.log("  }");
  
  console.log(_var);    //->var_for //継承されfor内で書き換えられた
  console.log(_const);  //->const_func //継承されないのでfor内のものとは別
  console.log(_let);    //->let_func  //継承されないのでfor内のものとは別
  
  func2();

  //_const = "const_func_2"; ->Error  constは再代入不可
})();

function func2(){
  //console.log(_var); -> undefined
  //console.log(_const); -> undefined
  //console.log(_let); -> undefined
}
</script>