菜鸟入门指南?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