函数参数的传递时发现的一些问题

今天同学问到的问题,
function fun(ger){
   ger=5;
   console.log(ger);
   function ger(){
      alert(“hello world”);
   }
}
fun()
输出的就是5,
可以解释,由于function声明提升,所以去了上面,先声明,后赋值,所以输出5
后面改下代码,不要赋值5了,传参数进去5
function fun(ger){
   console.log(ger);
   function ger(){
      alert(“hello world”);
   }
}
fun(5)
最后输出的是function
为什么不是5呢,传递参数5和赋值5有什么区别呢,
最后找答案,有一个机制,
// 1.分析全局变量GO,生成go对象
// GO={
// 全局变量声明:
// 没有略过
// 全局函数声明:
// fun:function;
// }
// 2.逐行执行
// 3.分析AO,生成AO对象
// AO={
// 1.分析参数
// ger:5
// 2.分析变量声明:
// 没有略过
// 3.分析函数声明
// ger:function;
// 重复名称覆盖
// }
// 最后输出:function ger(){
// alert(“hello world”);
// }

从这里可以看出来,参数传递的作用域,是有一个GO对象和AO对象的,
变量5传递进去,先是参数的声明与赋值,然后是变量的声明,最后是函数的声明,因为同名,所以覆盖;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值