参数作用域
总所周知,作用域有全局作用域,函数作用域和块作用域,但其实当函数存在默认参数,就会在函数实例化时产生参数作用域
面试题测试
var x=1;function foo(x,y=function(){this.x=3;console.log(x);}){console.log(x);var x=2;y();console.log(x);}foo();console.log(x);/*答案undefined321*/
本题重点在于y函数中x=3修改的是哪个x,其实答案是修改的参数x,并且参数x与函数内声明的var x=2其实是不同的x
这是由于参数作用域的产生,在函数作用域与全局作用域之间由于此处存在参数y的默认赋值,产生了参数作用域;且y函数中的x修改是其外层参数作用域的x
总结:只要存在默认参数,函数实例化时就会生成参数作用域
