You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

let本应具块级作用域,这段JS代码为何返回number与undefined?

问题解释

先看你提供的代码:

function fn() {
  let ax = bx = 110;
  ax++;
  return ax;
}
fn()
console.log(typeof bx)
console.log(typeof ax)

你疑惑的核心是**let ax = bx = 110这行代码的执行逻辑和变量作用域**:

  • 这行代码不是同时用let声明ax和bx,而是拆解成两步执行:
    1. 先执行bx = 110:此时bx没有被任何关键字(let/const/var)声明,JS会自动将其挂载到全局对象(浏览器环境是window,Node.js环境是globalThis),成为全局变量。
    2. 再把bx = 110的结果(也就是110)赋值给let ax:ax是用let声明的函数内部变量,仅在fn函数的作用域内有效。

所以执行后的结果逻辑:

  • 调用fn()后,全局的bx已经被赋值为110,所以console.log(typeof bx)输出number。
  • ax的作用域仅限fn内部,外部代码无法访问,所以console.log(typeof ax)时,ax属于未定义变量,typeof对未定义变量返回undefined。

如果想让bx也成为函数内部的块级作用域变量,需要分开声明:

function fn() {
  let bx = 110;
  let ax = bx;
  // 或者简写为 let bx = 110, ax = bx;
  ax++;
  return ax;
}

内容的提问来源于stack exchange,提问作者Divyanshu Thakur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:32:08