1.undefined

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

2.声明提前

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

3.声明提前的执行代码

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

4.let—没有变量提升

let const 是块级作用域。

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

5.function是优先于var声明的(如果重名同时存在,会将其覆盖)

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