What is the difference between var and let in Typescript?
Solution 1:
var
declaration is function scoped and let
declaration is block scoped.
See https://basarat.gitbooks.io/typescript/content/docs/let.html for more details.
Solution 2:
example:
// demo: var
for(var i =0; i<5; i++){
console.log(i)
}//finally i =5
console.log(i) // i=5
// demo: let
for(let i = 0; i<5; i++){
console.log(i)
}
console.log(i)// i is undefined
Solution 3:
var
variables in JavaScript are function scoped. This is different from many other languages (C#, Java, etc.) where the variables are block scoped. If you bring a block scoped mindset to JavaScript, you would expect the following to print 123, instead it will print 456:
var foo = 123;
if (true) {
var foo = 456;
}
console.log(foo); // 456
This is because {
does not create a new variable scope. The variable foo
is the same inside the if block as it is outside the if block. This is a common source of errors in JavaScript programming. This is why TypeScript (and ES6) introduces the let
keyword to allow you to define variables with true block scope. That is, if you use let
instead of var
, you get a true unique element disconnected from what you might have defined outside the scope. The same example is demonstrated with let
:
let foo = 123;
if (true) {
let foo = 456;
}
console.log(foo); // 123
Solution 4:
function varTest() {
var x = 1;
if (true) {
var x = 2; // same variable!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // different variable
console.log(x); // 2
}
console.log(x); // 1
}
I found this here
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
Solution 5:
It's all about accessibility. If you use let
then it will be accessible under that scope only not outside of the function
, if
, else
scope. but var
we can access outside of the for
, if
, else
.
See below code
public selectedLocation(country)
{
if(instance==this.list[0])
{
var obj=this.productArray
}
for(let i = 0; i < this.obj.length; i++)
{
obj=this.productPending
}
}
Above code is working with var obj
but this will not work with let obj
for the for loop
.