菜鸟入门指南?JS变量的优先级

VanMagnus 9年前

来自: http://www.cnblogs.com/pssp/p/5224097.html

什么是优先级?就像css中的选择器,谁的权重越高,那么最终作用的就是谁,在js中变量也是有优先级的。

var a = 10;  function a(){      console.log(1);  }  a(); //Uncaught TypeError: a is not a function

这里为什么报错,因为变量a被函数a给覆盖了,因为函数的声明比变量的声明更早,其实这和变量声明提前有关系,如果你对这个感兴趣可以看 js中的执行上下文,菜鸟入门基础。 这篇文章

var a = 10;  function fn1(a){      console.log(a);  }  fn1(2); //2

函数中形参的优先级大于全局变量。

var a = 10;  function fn1(a){      var a = 5;      console.log(a);  }  fn1(2); //5

函数中的变量优先级大于函数的形参,实际上这里的形参被函数中的变量a给覆盖了,不相信我们来看这段代码。

function fn1(a){      a = 5;      console.log(a);  }  fn1(2); //5  console.log(a); //a is not defined

如果说函数中的变量a没有把函数中的形参a给覆盖的话,那么我们在函数中没有加var声明的就是全局变量,那么如果是全局变量的话,那么我们在外部打印这个变量a应该是正确的才对,但是这里却说a没有定义,使用可以说明函数中的变量a被形参给覆盖了。

function fn1(a){      var a = 5;      function a(){          alert('追梦子');      }      console.log(a); //5  }  fn1(2);

虽然fn中的函数a在变量a之后定义的,但是因为函数的声明比变量的声明提前所以函数a依然被变量a给覆盖了,所以打印的就是5