Javascript 让提升到作用域或创建它在哪里?

Javascript let hoisting to the scope or creating where it is?

x 在 fn 函数之后声明,但 returns 它的值。 为什么 fn 没有 return 未定义?

function doWork(){

  let fn = function(){ return x; }
  let x = 2;

  return fn();

}

console.log(doWork()); // 2

在您的 doWork() 函数中,首先您设置一个函数并将其分配给 fn -- 此函数 尚未 被调用。然后,您将 x 定义为 2这个定义之后你通过调用return fn().

来调用fn()

因为JavaScript是从上到下工作的,x是在你引用fn()的时候定义的,所以fn()能够return x正确。

这可以在下面看到:

function doWork() {
  let fn = function() {
    return x;
  }
  let x = 2;
  return fn();
}

console.log(doWork()); // 2