The following is an aside from the main content of this week. However, it is important for you to start to understand some of the differences between the two keywords used for variables and binding.
You will have undoubtedly noticed the use of the let
and var
keywords throughout this course and in examples found elsewhere.
let
functions practically the same as var
, in that it allows you to declare and initialize a variable. let
is the keyword that you should already be using.
This new keyword was introduced in the most recent “update” to JavaScript, known as ES6 (or the 6th spec version of JavaScript). These ongoing specifications are discussed and developed by a world wide consortium, with the goal of making JavaScript a better language. This can mean safer, more secure, cleaner, easier to read, and more “future-proofed”. The inclusion of the let
keyword helps accomplish many of these goals.
So what is the difference between let
and var
?
Well, let
is block function scoped. (Remember back to variable scoping?) Meaning, that if you define a variable with let
inside of a for loop, it will not be available to the containing function block (i.e. draw()
). However, if you use the keyword var
, this will be available to the containing function block.
function setup() {
// var examples
for( var i=0; i <= 1; i++ ){
// 'i' is updated to 1
}
// we can use 'i' outside of the for loop
// 'i' will equal 2, as it was updated,
// and then caused the conditional to be false
console.log(i);
// let and var examples
for( let k=0; k <= 1; k++ ){
// 'k' is updated to 1
}
// we CANNOT use 'k' outside of the for loop
// this will throw an error
// This is often seen as safer
console.log(k);
}
When using the variable let
you also can not redefine a previously defined variable within the variable’s function block scope. This is a protection for you, so you do not accidentally overwrite previous variables.
// we can redefine var variables as much as we want
var der = 0;
var der = "hahaha";
// no errors and the computer is fine with the above.
// we CANNOT redefine let variables
let duh = 100;
let duh = "hello"; // ⇐ Throws and Error
// "SyntaxError: Can't create duplicate variable: 'duh'"
Please read the following on let
. This may be slightly confusing, as you are still learning everything, but try to understand more about the difference between the two.
I will start using both let
and var
in the lecture code examples. However, as with all of the previous examples, I will favor the use of let
whenever it is allowable, as this is seen by many to be safer for your coding practices.
You should do the same.
Finally, for those of you wanting to know more about ES6, the following is from the Introduction to the language specification. This should give you some idea as to what it is, and why it exists.
(For a deeper dive, read the Language Spec)
Introduction This Ecma Standard defines the ECMAScript 2015 Language. It is the sixth edition of the ECMAScript Language Specification. Since publication of the first edition in 1997, ECMAScript has grown to be one of the world’s most widely used general purpose programming languages. It is best known as the language embedded in web browsers but has also been widely adopted for server and embedded applications. The sixth edition is the most extensive update to ECMAScript since the publication of the first edition in 1997.
Goals for ECMAScript 2015 include providing better support for large applications, library creation, and for use of ECMAScript as a compilation target for other languages. Some of its major enhancements include modules, class declarations, lexical block scoping, iterators and generators, promises for asynchronous programming, destructuring patterns, and proper tail calls. The ECMAScript library of built-ins has been expanded to support additional data abstractions including maps, sets, and arrays of binary numeric values as well as additional support for Unicode supplemental characters in strings and regular expressions. The built-ins are now extensible via subclassing.
ECMAScript is based on several originating technologies, the most well-known being JavaScript (Netscape) and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in that company’s Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers from Microsoft starting with Internet Explorer 3.0.
The development of the ECMAScript Language Specification started in November 1996. The first edition of this Ecma Standard was adopted by the Ecma General Assembly of June 1997.
That Ecma Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international standard ISO/IEC 16262, in April 1998. The Ecma General Assembly of June 1998 approved the second edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the second edition are editorial in nature.
The third edition of the Standard introduced powerful regular expressions, better string handling, new control statements, try/catch exception handling, tighter definition of errors, formatting for numeric output and minor changes in anticipation future language growth. The third edition of the ECMAScript standard was adopted by the Ecma General Assembly of December 1999 and published as ISO/IEC 16262:2002 in June 2002.
After publication of the third edition, ECMAScript achieved massive adoption in conjunction with the World Wide Web where it has become the programming language that is supported by essentially all web browsers. Significant work was done to develop a fourth edition of ECMAScript. However, that work was not completed and not published1 as the fourth edition of ECMAScript but some of it was incorporated into the development of the sixth edition.
The fifth edition of ECMAScript (published as ECMA-262 5th edition) codified de facto interpretations of the language specification that have become common among browser implementations and added support for new features that had emerged since the publication of the third edition. Such features include accessor properties, reflective creation and inspection of objects, program control of property attributes, additional array manipulation functions, support for the JSON object encoding format, and a strict mode that provides enhanced error checking and program security. The Fifth Edition was adopted by the Ecma General Assembly of December 2009.
The fifth Edition was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international standard ISO/IEC 16262:2011. Edition 5.1 of the ECMAScript Standard incorporated minor corrections and is the same text as ISO/IEC 16262:2011. The 5.1 Edition was adopted by the Ecma General Assembly of June 2011.
Focused development of the sixth edition started in 2009, as the fifth edition was being prepared for publication. However, this was preceded by significant experimentation and language enhancement design efforts dating to the publication of the third edition in 1999. In a very real sense, the completion of the sixth edition is the culmination of a fifteen year effort.
Dozens of individuals representing many organizations have made very significant contributions within Ecma TC39 to the development of this edition and to the prior editions. In addition, a vibrant informal community has emerged supporting TC39’s ECMAScript efforts. This community has reviewed numerous drafts, filed thousands of bug reports, performed implementation experiments, contributed test suites, and educated the world-wide developer community about ECMAScript. Unfortunately, it is impossible to identify and acknowledge every person and organization who has contributed to this effort.
New uses and requirements for ECMAScript continue to emerge. The sixth edition provides the foundation for regular, incremental language and library enhancements.
- Allen Wirfs-Brock
(ECMA-262, 6th Edition Project Editor)