在函数的作用域中,又有传参又有var 新的声明且变量名字一样的时候该以哪一个优先级高?

<script>
var a=1
function fn1(a){//教程中介绍:此处传参a就相当于在函数中var a
var a=3+a//问题1:此处重新var a是吧传参处声明的a重新清空并覆盖掉吗?问题2:对于传参处声明的var a和此处声明的var a有声明区别吗,它们两者的关系,和js解读的逻辑请详细讲解下。
alert(a)
var a=8//问题3:此处重新var a是吧传参处声明的a重新清空并覆盖掉吗?还是前面的var a=3+a,a重新清空并覆盖掉吗?

alert(a)

}
fn1(4);
alert(a)
</script>
问题1:此处重新var a是吧传参处声明的a重新清空并覆盖掉吗?
问题2:对于传参处声明的var a和此处声明的var a有声明区别吗,它们两者的关系,和js解读的逻辑请详细讲解下。
问题3:此处重新var a是吧传参处声明的a重新清空并覆盖掉吗?还是前面的var a=3+aa重新清空并覆盖掉吗?
问题4:在函数的作用域中,又有传参又有var 新的声明且变量名字一样的时候预解析该以哪一个优先级高?


心有法竹
浏览 740回答 2
2回答

慕容708150

这是我在浏览器的一个实例,可以看一下;再上理论——函数内的变量提升!当js进入到新的函数时,函数内所有变量的声明都被提到函数最前面,但是赋值操作还在原地不动。另外很重要的一点是,变量声明是系统根据变量名称进行内存空间分配的,当之前已有某一变量时,你只是单纯地声明而不是赋值的话,它所占内存空间是不变的,也就是说该变量值是不变的!再上一张图,来自于 javascript面向对象编程指南 这本书

慕容森

首先你要明白一个知识点就是变量声明提升,并且变量重复声明并不会影响其值var a = 1;console.log(a);//1var a = 2;console.log(a);//2var a = a+4;console.log(a);//6上面等价下面var a,a,a;//声明提升//下面的都是赋值操作a = 1;console.log(a);//1a = 2;console.log(a);//2a = a+4;console.log(a);//6从上面看 声明过的变量 重新声明是没有意义的,所以就不存在声明变量谁覆盖谁,因为只要有一个声明就够了(同一个作用域)你的代码就变成下面的了var a;//声明提前a = 1;//全局变量function fn1(a) {&nbsp; &nbsp; //重复声明没有意义所以直接省略(同一个作用域)&nbsp; &nbsp; //下面都是简单的赋值操作不用说了&nbsp; &nbsp; a = 3 + a;&nbsp; &nbsp; console.log(a);//7&nbsp; &nbsp; a = 8;&nbsp; &nbsp; console.log(a);//8}fn1(4);alert(a);//函数内声明的变量是局部的并不会影响全局变量 所以这里是a=1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript