2016-05-04 17 views
6

Ho letto su ES6 Let keyword parola chiave esistente vs esistente.let vs var performance

Ho alcune domande. Capisco che "scoping" è l'unica differenza tra let e var ma cosa significa per il quadro generale?

function allyIlliterate() { 
    //tuce is *not* visible out here 

    for(let tuce = 0; tuce < 5; tuce++) { 
     //tuce is only visible in here (and in the for() parentheses) 
    }; 

    //tuce is *not* visible out here 
}; 

function byE40() { 
    //nish *is* visible out here 

    for(var nish = 0; nish < 5; nish++) { 
     //nish is visible to the whole function 
    }; 

    //nish *is* visible out here 
}; 

Ora le mie domande:

  1. posses Does lasciare alcuna memoria (/ performance) di vantaggio oltre var?

  2. Oltre al supporto del browser, quali sono i motivi per i quali dovrei utilizzare il metodo "var"?

  3. È sicuro iniziare a utilizzare ora su var nel mio flusso di lavoro del codice?

Grazie, R

+0

Avete fatto qualche benchmark per provare a scoprirlo? Ecco dove sta la prova. – tadman

+0

Non ho provato il benchmarking ma non lo faccio da quando hai sollevato una buona domanda – TechnoCorner

+3

Non sono sicuro del motivo per cui è stato contrassegnato come duplicato. Non c'è copertura delle prestazioni sul link "duplicato". Ma per rispondere alla tua domanda, [dipende] (https://kpdecker.github.io/six-speed/). Se stai usando le parole chiave 'let' e' const' di ES6 nel Nodo v6, allora è inequivocabilmente più lento. Alcuni problemi si presentano anche in Chrome 49 e 52, ma Firefox 46 e 49 sembrano non avere differenze di prestazioni tra ES6 'let' e' const' vs 'var'. – timolawl

risposta

5

let è molto più lento rispetto a var node.js. Versione v6.3.0 comunque. A volte questo è drammatico. Il codice riportato di seguito è circa tre volte più lento se si sostituisce var con let:

function collatz() { 
    var maxsteps = 0; 
    var maxval = 0; 

    var x = 1; 
    var n; 
    var steps; 

    while (x < 1000000) { 
     steps = 0; 
     n = x; 
     while (n > 1) { 
      if (n & 1) 
       n = 3*n + 1; 
      else 
       n = n/2; 
      steps += 1; 
     } 
     if (steps > maxsteps) { 
      maxsteps = steps; 
      maxval = x; 
     } 
     x += 1; 
    } 
    console.log(maxval + ' - ' + maxsteps + ' steps'); 
} 

collatz();