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

同名函数与变量下typeof运算符的结果差异问题

为什么Chrome控制台逐行执行和一次性执行结果不同?

嘿,这个问题戳中了很多JS新手容易混淆的点——标准脚本执行机制和浏览器控制台执行机制的差异,我来给你掰扯清楚:

1. 一次性执行(或单行执行完整代码)的逻辑

当你把整段代码作为一个完整的脚本执行时,JS引擎会先进行预编译(变量提升):

  • 首先,提升所有变量声明:var count;(此时count是undefined)
  • 然后,提升所有函数声明:function count() {}(函数声明优先级高于变量声明,所以此时count被覆盖为这个函数)
  • 进入执行阶段:执行var count = 1;,这一步是给count赋值为1,覆盖了之前的函数引用
  • 最后console.log(typeof count)自然输出number,这和你预期的一致

2. Chrome控制台逐行执行的特殊逻辑

Chrome控制台的逐行执行,本质是把每一行代码当作独立的执行单元来处理,而不是作为一个完整的脚本块预编译:

  • 执行第一行var count = 1;:此时全局作用域里的count是number类型的1
  • 执行第二行function count() {};:在全局作用域下单独执行函数声明时,JS引擎会直接把这个函数绑定到全局对象的count属性上,直接覆盖了之前的数值1(因为全局作用域中,变量和函数都是全局对象的属性,后赋值的会覆盖先有的)
  • 执行第三行console.log(typeof count):此时count已经是函数了,所以输出function

简单来说,控制台逐行执行跳过了“整段预编译”的步骤,每一步都是即时生效的赋值/声明,自然和一次性执行的结果不一样啦~

内容的提问来源于stack exchange,提问作者Parth Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:06