关于js的function参数的作用域
如题:
var x = 1;
function foo(a,b=function(){x=2}) {
var x = 3;
b()
console.log(x)
}
foo()
console.log(x)
// 打印 3 2
其实可以写成这种格式,比较好理解:
var x = 1;
var defaultB = function() { x = 2 };
function foo(a, b = defaultB) { var x = 3; b(); console.log(x) };
foo();
console.log(x);
defaultB是定义在全局上下文的,所以它内部的x,应该是来自于全局作用域,而不是foo的作用域。
所以b(也就是defaultB)执行会改变全局作用域的x变量。
浙公网安备 33010602011771号