javascript - 为什么代码片段会这样输出?

标签 javascript function closures lexical-scope

const phrase = 'Hello';

if (true) {
  const user = 'John';

  var sayHi = () => {
    console.log(`${phrase}, ${user}`);
  };
}

sayHi(); // Hello, John
console.log(user); // ReferenceError: user is not defined

user 和 sayHi 都定义在 if block 内,但是 sayHi 在 block 外可用,同时 user 不可用。为什么?

最佳答案

每当您使用 var 定义一个变量时,该变量就会被提升——这意味着它的声明被移动到当前作用域的顶部。 然而,对于使用 let/const 创建的作用域变量,情况并非如此,其中变量仅在它们创建的范围内定义

关于javascript - 为什么代码片段会这样输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57954630/

相关文章:

javascript - Google map API - AutoSuggest 表单文本字段

c++ - 阿克曼表生成器

javascript - 在 Ruby 方法中捕获变量

algorithm - 这个伪代码的时间复杂度是多少?

Python:如何从函数中拆分并返回列表以避免内存错误

javascript - JS 中带参数的闭包

c++ - 如何在 Cuda 设备函数中使用 C++11 中的闭包参数声明函数?

javascript - 为什么 scrollHeight 与 textarea 中的 lineHeight * lines 不同?

javascript - 如何将参数传递给内联 JavaScript 函数

javascript - IDM 如何从 Youtube 等网站获取下载链接?