猿问

js作用域问题

为什么第一个输出的是function a(){}  下面函数调用传了参数fn(1)  这个参数没有改变预解析时  a=function a(){}吗。还是在传参的时候不会向下面var a=2一样的表达式改变  a的值


慕粉初学者
浏览 1275回答 2
2回答

Walk_

问题挺有意思的。为什么第一个输出的是function a(){}? 因为函数声明会提升到当前作用域的顶部。下面函数调用传了参数fn(1)  这个参数没有改变预解析时  a=function a(){}吗。还是在传参的时候不会向下面var a=2一样的表达式改变  a的值这句话没太看懂,只下说我的理解:不管你给不给函数fn1()传递参数,最后输出的结果都是一样。假设我们传入参数:1 ,这时1=参数a,参数a进入函数后。函数内会首先做两件事: 变量声明提升和函数声明提升,即把变量和函数的声明提升到当前作用域的顶部。(具体可自行百度)。于是函数内的代码会变成这样子:function fn1(a){   var a;    function a(){};     console.log(a);       a=2;      console.log(a); }可见,我们传进函数内的参数a被函数内部声明的变量a先覆盖掉了。以上是个人拙见,如有错误,欢迎指正。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答