为何Windows 7的Chrome控制台中console.dir(add)不显示作用域变量?
为何Windows 7的Chrome控制台中console.dir(add)不显示作用域变量?
先来看你这段创建闭包的代码:
const add = (function () {let counter = 0; return function () {counter += 1; return counter}}) ();
出现这种差异的核心原因是Chrome版本的差异,具体来说:
- Windows 7系统的Chrome有版本上限:Chrome从110版本开始就停止支持Windows 7了,所以你Win7上的Chrome最多只能升级到109版本。而这个旧版本的DevTools(控制台工具),对闭包作用域的可视化调试功能还不完善,
console.dir不会主动展示函数关联的词法环境(也就是闭包保存的作用域),所以你看不到包含counter的[[Scopes]]属性。 - Windows 10可以安装最新版的Chrome(目前已经到120+版本),新版本的DevTools做了大量调试功能优化,其中就包括对闭包作用域的追踪展示。当你用
console.dir打印闭包函数时,DevTools会把函数关联的词法环境(也就是保存counter的那个作用域)以[[Scopes]]的形式展示出来,你就能看到内部的counter变量了。 - 另外,Windows 7已经停止官方支持,Chrome也不会再为其推送功能更新,所以Win7上的Chrome DevTools永远不会有这个闭包可视化的功能,而Win10的Chrome能持续更新,自然能用到这些新特性。
你可以自己验证一下:在Win7的Chrome地址栏输入chrome://version/查看版本,再对比Win10上的Chrome版本,就能明确版本差异是问题的根源。
备注:内容来源于stack exchange,提问作者user20742467
相关产品推荐
相关产品推荐

