最近在看《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抛出了错误
注:参数作用域只有当参数中有默认传值的时候才会存在,它不能访问函数内部的变量,但是可以向上查找。
这是我的一点理解,加上询问群里群友的一些反馈,欢迎大家发表高见!