1.undefined

  1. /*如果声明一个变量没有赋值的情况下就会输出undefined
  2. null就是空,在内存中不占空间*/
  3. var a;
  4. console.log(a); //undefined

2.声明提前

/*声明提前,变量提升
javascript在执行代码的时候会将所有使用var声明的变量,放在作用域的顶部集中创建,赋值留在原地
*/
<script>
  console.log(a);
  var a=20;
  function go(){
    console.log("hello world")
    }
    var b="good"
</script>

3.声明提前的执行代码

<script>
  var a,b;
  console.log(a);  //undefined  因为a没有赋值
  a=10;
  b="good"
</script>

4.let—没有变量提升

 <script>
 /*在es6中没有声明提前,在es5里面有*/
   console.log(a);
   let a=10;   //报错
 </script>

5.function是优先于var声明的(如果同时存在的话)

//var和undefined都会提前声明的,而且function是优先于var声明的,如果同时存在的话
//会将function声明的函数放在作用域的顶部
console.log(a);
var a=20;
function a(){
  console.log(a);
}
a();
//1.function和var声明的变量   2.调用的函数   3.赋值
var a=function(){
  console.log(a);
}
var a;
console.log(a);
a=20;
a();