【问题标题】:Chrome debugger showing wrong valuesChrome 调试器显示错误的值
【发布时间】:2018-09-06 10:13:27
【问题描述】:

我在 Chrome Ubuntu(版本 68.0.3440.106 64 位)上调试我的 js 代码,我注意到调试器给了我错误的值,即使我通过添加观察表达式条目来观察值。

for (let i = 0; i < visibility.show.or.length; ++i) {
   const currentVisibilityContext = visibility.show.or[i];
}

但如果我使用 var 而不是 let 它工作正常

for (var i = 0; i < visibility.show.or.length; ++i) {
   const currentVisibilityContext = visibility.show.or[i];
}

谁能向我解释这种行为? 非常感谢。

【问题讨论】:

  • 从您的描述中不清楚究竟什么是不正确的,什么是预期的。根据这一点,观察到的行为要么是由代码的内部优化引起的,要么是 devtools 中的错误。

标签: javascript google-chrome for-loop google-chrome-devtools


【解决方案1】:

用 var 关键字声明的变量不能有块作用域。

在块 {} 内声明的变量可以从块外访问。

例子

{ 
    var x = 2; 
}
// x CAN be used here

在 ES2015 之前,JavaScript 没有块作用域。

用 let 关键字声明的变量可以有块作用域。

在块 {} 内声明的变量不能从块外访问:

例子

{ 
    let x = 2;
}
// x can NOT be used here

从 W3schools ofc 复制没有问题

【讨论】:

  • 所以如果你使用 let,i 是无法访问的。
  • 我同意用 let 声明的变量是块作用域的。代码没有问题,它运行没有任何错误,问题出在chrome调试器上。检查它在for循环内的断点,但它显示“i”为未定义。
  • 如果你要求 visibility.show 会返回什么?物体内部是什么?还是只是 {show: {...}}
【解决方案2】:

这太奇怪了。当控制台 sn-p 被触发时,我得到了这个。

是否是可见性的任何属性,observable 属性(如 KO 可观察对象)。可能调试器进入了可观察的属性,即函数,并且超出了范围。由于一切都在一行中,您可以看到调试器正在执行单个命令。请尝试将行拆分为多行,以查看其行为。

【讨论】:

  • 您的操作系统和 Chrome 版本是什么?
  • 版本 69.0.3497.81(正式版)(64 位)Win 10
  • 我尝试在我的桌面上运行 68.0.3440.106 chrome 并且行为相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多