2015-01-25 4 views
36

Als io.js jetzt supports ES6 können Sie endlich die const und let Schlüsselwörter verwenden. Offensichtlich ist let der Nachfolger von var, nur mit einigen Superkräften.const vs Lassen Sie beim Aufruf erfordern

Aber was ist mit const? Ich weiß natürlich, was "konstant" bedeutet, aber ich habe mich gefragt, wann ich es verwenden sollte (bezüglich Best Practices).

Z. B., wenn ich ein Modul erstellen, das ein anderes Modul benötigt, könnte ich schreiben:

'use strict'; 

const util = require('util'); 

const foo = function() { 
    // Do something with util 
}; 

module.exports = foo; 

Grundsätzlich ich jedes Vorkommen von var mit const ersetzt haben. Im Allgemeinen denke ich, dass dies in Ordnung ist, aber wenn ich diesem Muster folge, verlässt es mich viel mehr von const als let, da die meisten Variablen keine "Variablen" im wörtlichen Sinne sind.

Ist das ein guter Stil? Soll ich lieber let gehen? Wann sollte ich const über let wählen?

+1

Ich würde erwarten, dass "const" alle in Großbuchstaben sind, wie zum Beispiel 'const KEY_A = 65'. – elclanrs

+2

Die Art, wie ich darüber nachdenke, ist, dass ein 'const' verwendet werden sollte, wenn der Wert niemals geändert oder wichtiger vor Änderungen geschützt werden soll. 'let' sollte verwendet werden, wenn der Wert später überschrieben/geändert werden soll, und beide sollten verwendet werden, wenn Sie eine Blockbereichsvariable benötigen und keine Variable, die auf eine Funktion beschränkt ist. Wenn Sie eine Funktionsbereichsvariable benötigen, ist 'var' immer noch verfügbar. Ich könnte mich irren, ich habe nicht viel über ES6/2015 gelesen. – adeneo

+1

Das Deklarieren von 'util' als 'const' bedeutet nur, dass diese Variable nicht auf einen anderen Wert gesetzt werden kann. ** Allerdings ** können Sie Eigenschaften hinzufügen, ändern und daraus entfernen, wenn es sich nicht um ein primitives Element handelt. – idbehold

Antwort

35

const kann normalerweise verwendet werden, wenn Sie nicht wollen, Ihr Programm

  1. etwas auf die Variable

    "use strict"; 
    const a = 1; 
    a = 2; 
    

    zuweisen wird TypeError: Assignment to constant variable. produzieren.

  2. , um die Variable ohne explizite Initialisierung zu verwenden.

    "use strict"; 
    const a; 
    

    produzieren SyntaxError: Unexpected token ;

Einfach gesagt, ich würde sagen,

  • Verwendung const, wenn Sie einige Variablen wollen nicht

  • Verwendung modifiziert werden let wenn Sie wollen das genaue Gegenteil von const

  • Verwenden Sie var, wenn Sie mit ES5-Implementierungen kompatibel sein möchten oder wenn Sie einen Modul-/Funktionsebenenbereich wünschen.

Verwenden let nur, wenn Sie benötigen Ebene Scoping blockieren, sonst let oder var verwenden würde keinen Unterschied machen.

+3

Eigentlich "Let" und "Const" hissen, aber es ist ein bisschen komplizierter als das: http://StackOverflow.com/Q/31219420/3242070 –

+0

Ich glaube nicht, die erste Hälfte ist richtig. Das Beispiel mit 'A_CONST' wirft tatsächlich einen Fehler. 'const' und' let' hissen beide, unterliegen aber der ["temporal dead zone"] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let) so können sie nicht vor der Deklaration verwendet werden. – ZachB

+1

@ZachB Ich stimme zu. Zu meiner Verteidigung hat sich "const" im schlampigen Modus anders verhalten. [Ref] (https: // github.com/nodejs/node/pull/3152 # diskussion_r41552676). Danke, dass ich darauf hingewiesen habe, dass ich den Teil entfernt habe, der falsch ist. – thefourtheye

6

Ich habe das gleiche Gefühl, dass Sie beschreiben. Ein großer Prozentsatz der deklarierten Variablen in meinem Code sind in der Regel konstant, sogar Objekte und Arrays. Sie können konstante Objekte und Arrays deklarieren und noch in der Lage sein, sie zu ändern:

const arr = []; 
arr.push(1); 
arr; 
// [ 1 ] 

const obj = {}; 
obj.a = 1; 
obj; 
// { a: 1 } 

AFAIK ES6 modules keine Variablendeklarationen erfordern beim Import, und ich vermute, dass io.js will move to ES6 modules in a near future.

Ich denke, das ist eine persönliche Entscheidung. Ich würde immer const verwenden, wenn Sie Module und lokale Modulvariablen benötigen (foo in Ihrem Beispiel). Für den Rest der Variablen verwenden Sie const entsprechend, aber gehen Sie nie verrückt und benutzen Sie const überall. Ich kenne die Performance zwischen let und const nicht, daher kann ich nicht sagen, ob es besser ist, const wann immer möglich zu verwenden.

+0

Warum nicht verrückt werden und 'const' überall benutzen? Ich habe festgestellt, dass ich sehr selten ein "Let" brauche (meistens, wenn ich einen Wert in einer 'if' oder' switch' Klausel festlege). Es gibt keinen Nachteil darin, "const" zu verwenden, wo immer es möglich ist und die Oberseite von mehr Information über die Variable für den Leser. – Perseids

-2

LET V/S CONST

Difference

  • Der große Unterschied zwischen lassen und const ist, dass der Versuch, zu einem zuzuweisen zuvor definierte Konstante wird einen Fehler in sowohl streng werfen und nicht strikte Modi

Ähnlichkeit

  • Ähnlich lassen, ein Fehler ausgelöst wird, wenn ein const Deklaration mit einer Kennung für einen bereits definierten Variablen im gleichen Umfang durchgeführt wird.

Zum Beispiel:

var message = "Hello!"; 
let age = 25; 

// Each of these would cause an error given the previous declarations 
const message = "Goodbye!"; 
const age = 30; 
  • Konstanten werden auch Blockebene Erklärungen, ähnlich zu lassen. Das bedeutet, dass Konstanten zerstört werden, sobald die Ausführung aus dem Block herauskommt, in dem sie deklariert wurden, und dass die Deklarationen nicht an den Anfang des Blocks gehängt werden.
2

Leistungstest const vs let Verwendung require für Node.js 6.10:

require('do-you-even-bench')([ 
    { name: 'test 1', fn: function() { 
    const path = require('path'); 
    } 
    }, 
    { name: 'test 2', fn: function() { 
    let path = require('path'); 
    } 
    } 
]); 

Test 1 .... 2,547,746.72 op/s
Test 2 .... 2,570,044.33 op/s