2015-03-24 5 views
6

ausgeführt. Wenn ich diesen Code in Chrome debugge, wird die Anweisung im zweiten 'if' nicht ausgeführt. Aber wenn ich es in Firefox debugge, wird die Aussage im zweiten 'wenn' ausgeführt.Wenn die Bedingung 'if' falsch ist, werden Anweisungen nicht in Chrome ausgeführt, sondern in Firefox

enter image description here

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

    }]); 

Firefox Version: 35.0.1 Chrome-Version: 41.0.2272.101 m

Warum geschehen ist das?

Update:

auch getestet in Firefox 36.0.4, das gleiche Problem.

+4

ich Ihr Szenario in Firefox-Versionen 30, 33.1.1 und 36.0.4 getestet. Sie alle führen nur das erste "if" aus, genau wie Chrome. –

+0

@crates_barrles Ich replizierte das Problem in Firefox 35. Chrome 40 war in Ordnung ... –

+4

Es sieht nur so aus, als ob es ausgeführt wird, der Debugger hebt nur diese Zeile hervor, bevor es überspringt –

Antwort

3

Dies ist vielleicht ein Fehler oder es könnte nur sein, wie sie es entworfen haben. Dies scheint aber mit, wie die Debugger-Angebote zu tun mit if-Anweisung Bedingungen kann es leicht zu bewerten und den Code Styling verwendet (K & R, Allman, 1TBS, etc)

debugger screen

Codezeilen, die haben Haltepunkte, die auf sie gesetzt sind, sind grün schattiert, und solche, die nicht markiert werden können, werden vom Debugger grau schattiert.

Einfach gesagt, der Debugger hebt nicht hervor, ob Anweisungszeilen (und vielleicht sogar andere Anweisungszeilen), die er leicht mitteilen kann, eine Wahr/Falsch-Bedingung haben. Wenn Sie einen Haltepunkt setzen, wird der Haltepunkt stattdessen auf die nächste durchbrechbare Codezeile gesetzt.

Bei Blöcken, die 1TBS/OTBS- oder K & R-Formatierung verwenden, markiert der Debugger die erste brechbare Zeile innerhalb des if-Blocks anstelle der tatsächlichen if-Anweisungszeile. Dies gibt den falschen Eindruck, dass der Code in falscher Bedingung ist, wenn die Anweisungen als nächstes ausgeführt werden.

Bei Blöcken, die Allman-Formatierung verwenden, markiert der Debugger beim Durchlaufen keinen Teil der if-Anweisung oder des Codeblocks. Und wenn Sie versuchen, eine Codeunterbrechung auf die if-Anweisung zu setzen, wird der gesamte Block übersprungen und der Haltepunkt auf die nächste brechbare Zeile gesetzt.

Wenn die if-Anweisungen keine Bedingungen verwenden, die der Debugger ohne weiteres als wahr/falsch lesen kann, verhält sich der Debugger wie erwartet.

Demo testen

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"); 
 
}

+1

Schön. Meiner Meinung nach ist es definitiv ein Fehler - es sollte wirklich keine Codezeile markieren, die nicht wirklich ausgeführt wird - dh es sollte auf der Zeile "if (false)" stehen bleiben. Sie scheinen eine Reihe von Problemen in diesem Bereich zu haben, so dass es in einigen Versionen Zeit gibt –

Verwandte Themen