我正在学习js中的箭头函数,在那里我发现了一个问题
console.log((function(x, f = () => x) {
var x;
var y = x;
x = 2;
return [x, y, f()];
})(1));
它的输出是2,1,1
,但它应该是1,1,1
。
有人能解释一下吗?
下面是重写的函数,以显示正在发生的事情。
main
占用x
=1
defaultFunction
返回原来的x
=1
resultFn
是在main
内部调用的函数,它接受x
y
被分配x
,1
x
被重新分配给2
结果为
2, 1, 1
这是一个关于变量/参数范围的练习。
const main = (x) => { // x = 1
const defaultFn = () => x; // x = 1
const resultFn = (x, f = defaultFn) => { // x = 1
var x; // x is still 1
var y = x; // y = 1
x = 2; // x = 2
return [x, y, f()]; // x = 2, y = 1, f() -> 1
};
return resultFn(x); // 2, 1, 1
};
console.log(main(1));
您将x设置为2,因此它返回为2。把x换成1。固定代码:
console.log((function(x, f = () => x) {
var x;
var y = x;
x = 2;
return [x, y, f()];
})(1));