js 默认传参 参数作用域 报错

本文探讨了JavaScript中函数默认参数的用法,通过两个示例解释了默认参数值的查找过程及其潜在的错误情况。在第一个例子中,函数foo的默认参数x从全局作用域获取值为1的y,因此输出1。而在第二个例子中,由于函数内部的x与默认参数x同名,导致出现undefined=undefined的错误。博主分享了自己的理解,并邀请读者分享更多见解。
摘要由CSDN通过智能技术生成

最近在看《js高级程序设计》,在函数默认传参这块遇到问题,虽然没有完全理解,但是还是来记录一下,如果大家有更好的解释,欢迎留言评论

1.

var y = 1
function foo(x=y){
console.log(x)
}
foo()  //1

在这种情况下,参数作用域内,右边的y会沿着作用域链查找到全局作用域中的y(值为1),进而赋值给x,x默认的参数就是1 打印结果也是1

2.

var x = 1
function foo(x=x){
console.log(x)
}
foo()  //报错

这种情况乍一看,好像是和第一种一样的,但是结果却抛出error,断点调试了一下,发现在参数作用域中,是undefined = undefined的情况

可能是计算机把同名的x,右边的当作了形参,值是undefined,左边的也就是undefined , undefined = undefined抛出了错误

注:参数作用域只有当参数中有默认传值的时候才会存在,它不能访问函数内部的变量,但是可以向上查找。

这是我的一点理解,加上询问群里群友的一些反馈,欢迎大家发表高见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值