var和let和const的区别与用法
1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象,可以修改,如果不初始化会输出undefined,不会报错。
var x = 10; // 这里x为10 { var x = 2; // 这里x为2 } // 这里x为 2 var a = 1; // var a;//不会报错 console.log(‘函数外var定义a:‘ + a);//可以输出a=1 function change(){ a = 4; console.log(‘函数内var定义a:‘ + a);//可以输出a=4 } change(); console.log(‘函数调用后var定义a为函数内部修改值:‘ + a);//可以输出a=4
2.let是块级作用域,使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;函数内部使用let定义后,对函数外部无影响
let c = 3; console.log(‘函数外let定义c:‘ + c);//输出c=3 function change(){ let c = 6; console.log(‘函数内let定义c:‘ + c);//输出c=6 } change(); console.log(‘函数调用后let定义c不受函数内部定义影响:‘ + c);//输出c=3 { let x = 10; } // 此处不可以使用 x
3.使用const声明的是常量,在后面出现的代码中不能再修改该常量的值,而且在定义时必须初始化
const a=1;//正确 const b;//错误,必须进行初始化 a=2;//错误,不允许修改
4.其他情况
在相同的作用域,或在相同的块中,通过 let 重新声明一个 var 变量是不允许的:
var x = 10; // 允许 let x = 6; // 不允许 { var x = 10; // 允许 let x = 6; // 不允许 }
在相同的作用域,或在相同的块中,通过 let 重新声明一个 let 变量是不允许的:
let x = 10; // 允许 let x = 6; // 不允许 { let x = 10; // 允许 let x = 6; // 不允许 }
在相同的作用域,或在相同的块中,通过 var 重新声明一个 let 变量是不允许的:
let x = 10; // 允许 var x = 6; // 不允许 { let x = 10; // 允许 var x = 6; // 不允许 }
在不同的作用域或块中,通过 let 重新声明变量是允许的:
let x = 6; // 允许 { let x = 7; // 允许 } { let x = 8; // 允许 }
原文:https://www.cnblogs.com/bxzen/p/14763119.html