如果'if'条件为false,则语句不在chrome中执行,而是在Firefox中执行

Kha*_*ain 6 javascript angularjs

这是我的场景的一部分.当我在chrome中调试此代码时,第二个'if'中的语句不会被执行.但是当我在Firefox中调试它时,第二个'if'中的语句被执行.

在此输入图像描述

angular.module('optionsExample', [])
  .controller('ExampleController', ['$scope', function($scope) {
    debugger;
    if(true){
        $scope.name = 'Foo';
    }
      if(false){
        $scope.name = 'lol';
    }

  }]);
Run Code Online (Sandbox Code Playgroud)

Firefox版本:35.0.1 Chrome版本:41.0.2272.101 m

为什么会这样?

更新:

还在Firefox 36.0.4中测试过,同样的问题.

Pat*_*ans 3

这可能是一个错误,也可能只是他们的设计方式。但这似乎与调试器如何处理它可以轻松评估的 if 语句条件以及使用的代码样式(K&R、Allman、1TBS 等)有关

调试器屏幕

可以设置断点的代码行被调试器标记为绿色,而不能设置断点的代码行则标记为灰色。

简而言之,调试器不会突出显示它可以轻松判断是否具有真/假条件的 if 语句行(甚至可能是其他控制语句行)。设置断点时,断点将放置在下一个可中断的代码行上。

对于使用 1TBS/OTBS 或 K&R 样式格式的块,调试器将突出显示 if 块中的第一个可中断行,而不是实际的 if 语句行。这给人一种错误的印象,即接下来将执行错误条件 if 语句内的代码。

对于使用 Allman 样式格式的块,调试器在单步执行时不会突出显示 if 语句或代码块的任何部分。如果您尝试在 if 语句上放置代码中断,它将跳过整个块并将断点放置在下一个可中断行上。

当 if 语句不使用调试器可以轻松读取为真/假的条件时,调试器将按预期运行。

演示进行测试

debugger;
var one = true;
var two = false;

//Allman Style
if(one)
{
  console.log("Truth");   
}
if(two)
{
  console.log("false");   
}

if(true)
{
  console.log("Truth");   
}
if(false)
{
  console.log("false");   
}

//1TBS/OTBS Style
if(one){
   console.log("Truth");   
}
if(two){
   console.log("false");   
}
if(true){
   console.log("Truth");   
}
if(false){
   console.log("false");   
}
Run Code Online (Sandbox Code Playgroud)