2012-02-19 7 views
5

Sto riscontrando alcuni dei comportamenti più strani di Javascript.Javascript: false se espressione continua l'esecuzione di codice con scope

Anche se l'espressione nell'istruzione if viene valutata su false, il mio codice all'interno di if block continua a essere in esecuzione.

Ecco il frammento di codice:

if (view.leftCols !== null) { 
    var leftCols = view.leftCols.split(','); 

    for (var lc = 0; lc < leftCols.length; lc++) { 
     var lcv = leftCols[lc].split(':'); 
     var lcol = lcv[0]; 

     Array.add(allCols, lcol); 

     try { 
      var lwidth = lcv[1] - MyWorkGrid.getColWidth(lcol); 

      if (lcol === 'Edit') { 
       if ($.browser.msie && parseInt($.browser.version) <= 8) { 
        lwidth = 23; 
       } 
      } 

      // this if statement fails. 
      if (lwidth > 0) { 
       grid.SetWidth(lcol, lwidth); 
      } 
     } catch (e) { 
     } 

     grid.MoveCol(lcol, 0, 1, 1); 
    } 
} 

Ecco la mia Firebug screenshot:

Firebug

Tutte le idee?

+1

Quello che dici succede davvero non può accadere, quindi è meglio pubblicare il codice. Quell'immagine è illeggibile. – Pointy

+1

Screenshot illeggibile, pls. fornire il codice AND i valori correnti delle variabili utilizzate nel "se". Oh, a proposito, è * sempre * l'umano di fronte al computer, lo scopro ripetutamente ancora :) –

+1

solo un'ipotesi, ma forse firebug ha memorizzato nella cache una versione più vecchia della sceneggiatura e quello che vedi in quando esegui l'esecuzione passo passo non è ciò che viene effettivamente eseguito ... –

risposta

12

Nonostante la linea evidenziata in Firebug, sei sicuro che sia in esecuzione ? Ho visto questo comportamento in Firebug (e nelle prime versioni del debugger di Chrome) dove a volte potevano evidenziare una riga di codice come se fossero passati ad essa, senza che quella linea venisse effettivamente eseguita.

quindi mi piacerebbe inserire qualcosa di ambiguo (come un console.log("lwidth = " + lwidth); nel corpo del comunicato if per vedere se davvero esegue. La risposta potrebbe essere che Firebug è solo evidenziando/mostrando quella linea come quella attuale in modo non corretto senza il codice esso effettivamente in esecuzione.

+3

Vero. Questo strumento è chiamato FireBUG per un motivo ... – user123444555621

+0

Sei corretto. Se imposto il breakpoint all'interno dell'istruzione if. Non viene mai raggiunto quando 'lwidth <= 0' ... Dio aiuta Firebug! – Moon

+0

@Moon: Sono contento che sia stato. Se hai un semplice caso di test che replica il problema, probabilmente vale la pena [segnalarlo] (http://code.google.com/p/fbug/issues/list). Se l'avessi fatto quando l'ho visto un paio di anni fa (non ho usato Firebug per un po '), forse non l'avresti incontrato adesso. (Scusami per quello.) :-) –

-1

è solo l'ultima riga del blocco di codice che viene evidenziato. Come osservato nella risposta accettata sopra la riga evidenziata viene non eseguito.

1* var a=0;b=0;c=0; 
2* if(false){ 
3>  a++; 
4>  b++; 
5*  c++; 
6> } 
7> 
8* console.log(a+b+c); // will output 0; 

Firebug farà un passo sulla linea s 1 e 2 e quindi passerà alla riga 5 ma non incrementerà le variabili a, b o c, resteranno tutte a 0.

(p.s. non posso commentare .. quindi postare risposta con dettagli in più per il 2013)

+0

Cosa? !! Non ho idea del perché hai detto quello che hai detto! – Moon

+0

Scusa .. è stato un anno dopo, ma avevo pensato che altri avrebbero potuto imbattersi nello stesso strano comportamento di FireBug. Avevo ... e la risposta accettata mi ha aiutato a capire che il codice non veniva effettivamente eseguito .. appena evidenziato. E 'stato il mio primo post e stackoverflow non mi ha permesso di commentare quindi è probabilmente quello che ti ha confuso. – JJones

Problemi correlati