你的位置:首页 > Java教程

[Java教程]菜鸟入门指南?JS变量的优先级


  什么是优先级?就像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); //5console.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