var x= 0;
function foo(x, y = function () { x = 3;console.log(x)}) {
console.log(x)
var x = 2;
y();
console.log(x)
}
foo()
console.log(x)
题目就是上面这个,小伙伴们可以先自己猜测一下打印结果;
首先结果是:undefined 3 2 0
解析:上面一共出现了三层作用域,全局作用域、参数作用域、函数作用域。其中参数作用域是只有函数参数有默认值的情况下才会形成(可以去查ECMA文档)所以x=3,改变的只是参数作用域里面的x的值,不会影响到全局作用域和函数作用域里面x的值。
值得一提的是这个函数里面只能用var声明变量,因为let不能重复声明;
觉得有帮助的话给个赞呗。