首页 > 解决方案 > 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

谁能解释一下?

标签: javascriptfunctionarrow-functions

解决方案


这是重新编写的函数以显示正在发生的事情。

  1. main需要x=1
  2. defaultFunction返回原始x=1
  3. resultFnmain是一个在它内部被调用的函数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));


推荐阅读