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

0 0 html javascript
写bug小shuai
写bug小shuai

声望值:336 0人

2019-01-26 15:17:56 提问

关注 0关注

收藏 0收藏, 37浏览

           alert(a)

}
fn1(4);
alert(a)

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

请先 登录 后评论

2个回答

  • aゞ特仑苏97声望 2018-09-25 09:28

    首先你要明白一个知识点就是变量声明提升,并且变量重复声明并不会影响其值 var a = 1; console.log(a);//1 var a = 2; console.log(a);//2 var a = a+4; console.log(a);//6 上面等价下面 var a,a,a;//声明提升 //下面的都是赋值操作 a = 1; console.log(a);//1 a = 2; console.log(a);//2 a = a+4; console.log(a);//6 从上面看 声明过的变量 重新声明是没有意义的,所以就不存在声明变量谁覆盖谁,因为只要有一个声明就够了(同一个作用域)你的代码就变成下面的了 var a;//声明提前 a = 1;//全局变量 function fn1(a) { //重复声明没有意义所以直接省略(同一个作用域) //下面都是简单的赋值操作不用说了 a = 3 + a; console.log(a);//7 a = 8; console.log(a);//8 } fn1(4); alert(a);//函数内声明的变量是局部的并不会影响全局变量 所以这里是a=1
    请先 登录 后评论
  • 墙扶不起的阿斗106声望 2018-09-25 09:29

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

注册新账号

悬赏追问
10
  • 10
  • 20
  • 50
  • 100
  • 200
  • 输入数值
发布追问