JavaScript -- 预解析规则

众所周知 js中  使用var声明变量会存在变量 “预解析”(变量与函数提升)

// 预解析过程
// 1. 把var声明的变量提升到当前作用域最前面,不会提升赋值  var num = 19 ; var fn = function() {..}
// 2. 把函数声明 提升到当前作用域的最前面,,   function test() {....}
// 3. 如果函数同名 后者会覆盖前者  
// 4. 如果 var声明的 和 函数声明的同名 ,  函数覆盖var声明的

 

分享道关于js 预解析的面试题

  var a = 4;
  console.log(a);
  a = 6;
  console.log(a);
  function a() {
      console.log('哈');
   }

  a();

  a = 10;
  console.log(a);

预解析后: 函数与变量声明重复,函数会覆盖掉变量声明,底下的a=4又覆盖掉了函数 所以执行a() 的时候会报错 底部就不执行了
      function a() {
        console.log('哈');
      }
      var a;
      a = 4;
      console.log(a); //4
      a = 6;
      console.log(a); // 6 

      a(); //报错

      a = 10;
      console.log(a); //不执行
 
 
 
posted @ 2020-01-02 17:36  share_code  阅读(151)  评论(0)    收藏  举报