var、let、const的区别
- var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
- let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
- const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
<script type="text/javascript">
// 块作用域
{
var a = 1;
let b = 2;
const c = 3;
// c = 4; // 报错
var aa;
let bb;
// const cc; // 报错
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
console.log(aa); // undefined
console.log(bb); // undefined
}
console.log(a); // 1
// console.log(b); // 报错
// console.log(c); // 报错
// 函数作用域
(function A() {
var d = 5;
let e = 6;
const f = 7;
console.log(d); // 5
console.log(e); // 6
console.log(f); // 7
})();
// console.log(d); // 报错
// console.log(e); // 报错
// console.log(f); // 报错
</script>
转载https://blog.csdn.net/lizhengxv/article/details/80552081
1.let命令基本用法
1.let不存在变量提升
使用let声明的变量,不会像使用var那样存在“变量提升“”的现象。所以使用let声明变量,必须遵循“先声明,后使用”的原则。否则会报错
console.log(a); //ReferenceError 在申明之前 a报错
let a = 10;
如果是var声明的变量,则不会报错。
console.log(a); //undefined
var a = 10;
2.let声明的变量存在块级作用域
let声明的变量只在所声明的代码块内有效。块级作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。
{
var a = 10;
let b = 20;
}
console.log(a); //10
console.log(b); // ReferenceError: b is not defined
var a =[];
for( var i=0; i<10; i++ ){
a[i] = function(){
console.log(i);
}
}
for( var j = 0; j<a.length; j++ ){
a[j](); //输出10个10。 因为i是var声明的,在全局范围内都用,每次新的i都会覆盖原来的。
}
var a =[];
for( let i=0; i<10; i++ ){
a[i] = function(){
console.log(i);
}
}
for( let j = 0; j<a.length; j++ ){
a[j](); //输出 0,1,2,...,9
}
3.let不允许在同一作用域内重复声明同一个变量
var a = 10;
let a = 10;
console.log(a);//Uncaught SyntaxError:
Identifier 'a' has already been declared
let b = 10;
let b = 15;
console.log(b);//Uncaught SyntaxError:
Identifier 'a' has already been declared
4.暂时性死区:在代码块内,使用let声明变量之前,该变量都是不可以使用用
只要在同一作用域内存在let命令,他所声明的变量就“绑定”在这个作用域内,不管外部有没有声明
let a =10;
function fn1(){
console.log(a);
let a = 5;
}
fn1();//Uncaught ReferenceError: a is not defined
ES6规定,如果在区块中存在let和const声明的变量,则这个区块对这些声明的变量从一开始就形成一个封闭的作用域。不管在外部有没有声明这个变量。必须遵守“先声明,后使用”的原则,否则报错。
ES6规定暂时性死区和不存在变量提升,主要是为了减少运行程序的错误,防止出现“先使用(变量),后声明(变量)”的情况,从而导致意料之外的行为。这种错误在ES5中很常见,现在有了这种规定,就可以避免出现此类错误了
const命令的基本使用
const用来声明常量,一旦声明,其值就不能更改
const a = 10;
a = 20;
console.log(a);//Uncaught TypeError:
Assignment to constant variable.
const b = {
name:'zs',
age:22
}
b.name = "lzx";
b={};
console.log(b.name+"---"+b.age);//输出lzx---22
console.log(b);//Uncaught TypeError:
Assignment to constant variable.
1.const必须先申明,且赋值。
2.如果是初始化对象,其属性可修改,但其指向的地址不可修改。