【问题标题】:how come this variable inside of a function can read global variable under the function statement?为什么函数内部的这个变量可以读取函数语句下的全局变量?
【发布时间】:2018-04-11 09:31:11
【问题描述】:
function fn() {
    console.log(foo);
}

const foo = 3;

run();

为什么函数内部的这个变量可以读取甚至在函数语句下声明和赋值的全局变量?

JavaScript 在这种情况下如何工作? 我想了解它是如何工作的。

fn();

function fn() {
    console.log("hello");
}

我知道这确实是因为函数提升。但第一个代码是另一回事,对吧?

【问题讨论】:

  • 第一个代码只是在fn() 实际运行之前设置了foo。是的,第二个是由于吊装。
  • @Rhumborl 那么,在 JavaScript 中,语句在表达式之后运行?
  • @shu 在 JavaScript 中,声明影响它们发生的整个范围,变量范围并不从声明开始。

标签: javascript node.js


【解决方案1】:

JavaScript 被解释。该函数仅在您调用它时进行评估。如果将函数调用移到变量声明之前,它将不起作用。请参阅下面的代码(它给出了错误)

function fn() {
    console.log(foo);
}
fn();
const foo = 3;

function fn() 在被调用之前只是一个声明。

【讨论】:

  • 这是吊装吗?或者是其他东西?这种行为有什么术语吗?
  • 和作用域链有关系吗?
  • 这与编译与解释(以及两者之间的灰色区域)没有任何关系
  • @Bergi 跟提升和作用域链有关系吗?
  • @shu "hoisting",是的。范围链,不是真的(虽然是的,当然该示例确实使用词法范围从外部范围访问foo)。
猜你喜欢
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
相关资源
最近更新 更多