javascript输出中的箭头函数?



我正在学习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

有人能解释一下吗?

下面是重写的函数,以显示正在发生的事情。

  1. main占用x=1
  2. defaultFunction返回原来的x=1
  3. resultFn是在main内部调用的函数,它接受x
  4. y被分配x,1
  5. x被重新分配给2
  6. 结果为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));

最新更新