为什么第一个输出的是function a(){} 下面函数调用传了参数fn(1) 这个参数没有改变预解析时 a=function a(){}吗。还是在传参的时候不会向下面var a=2一样的表达式改变 a的值
2 回答
Walk_
TA贡献48条经验 获得超30个赞
问题挺有意思的。
为什么第一个输出的是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先覆盖掉了。
以上是个人拙见,如有错误,欢迎指正。
添加回答
举报
0/150
提交
取消