JavaScript执行问题

问题相关代码,请勿粘贴截图
<script>
    document.write("实验1");
    function name1() {
      document.write("具名函数");
    }

    var name2 = function() {
      document.write("<br/>匿名函数");
    }

    document.write("<br/>name1的name属性", name1.name);
    document.write("<br/>name2的name属性<br/>", name2().name);
    name1();
    name2();
  </script>

<script>
  document.write("<br/><br/>实验2");
  function name1() {
    document.write("具名函数");
  }

  var name2 = function() {
    document.write("<br/>匿名函数");
  }
  var name3 = name2();

  document.write("<br/>name1的name属性", name1.name);
  document.write("<br/>name2的name属性<br/>", name3.name);
  name1();
</script>

<script>
  document.write("<br/><br/>实验3");
  function name1() {
    document.write("<br/>具名函数");
  }

  var name2 = function() {
    document.write("<br/>匿名函数");
  }

  document.write("<br/>name1的name属性", name1.name);
  name1();
  name2();
</script>

运行结果及报错内容

img

我想要达到的结果

我想问的是当我删除"document.write("
name2的name属性
", name2().name);"这条语句时,就能显示具名函数,而不删除的话就显示不了,这是为什么
如果这段代码是错误的话,那为什么最后那条语句可以执行,可是如果是正确的话,那为什么下面紧邻的那条语句却不能执行,是JavaScript的判断延迟么,还是什么其它原因

name2().name 代码语法正确,运行时出错,导致程序终止运行。name2()返回值不是对象,而是undefined。