ES6新增----let const var的区别

mac2026-02-24  6

参考学习:https://www.cnblogs.com/LLLLily/p/7389652.html

var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。

ES6的let变量声明特点:

1. 拥有块级作用域 2.没有变量声明提升 3.暂时性死区 4.不能重复声明 5.let不会成为全局对象的属性

以上let所介绍的规则均适用于const命令,不同的是,const声明的变量不能重新赋值,也是由于这个规则,const变量声明时必须初始化,不能留到以后赋值 1.拥有块级作用域: 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 }

2.没有变量声明提升: 使用let声明的变量,不会像使用var那样存在“变量提升“”的现象。所以使用let声明变量,必须遵循“先声明,后使用”的原则。否则会报错

console.log(a); //ReferenceError let a = 10;

如果是var声明的变量,则不会报错。

console.log(b); //undefined var b = 10;

3.暂时性死区: 在代码块内,使用let声明变量之前,该变量都是不可以使用用 只要在同一作用域内存在let命令,他所声明的变量就“绑定”在这个作用域内,不管外部有没有声明

let a =10; function fn1(){ console.log(a); let a = 5; } fn1();//Uncaught ReferenceError: a is not defined

4不能重复声明 在同一作用域内,如果使用var声明同一个变量,则后面的覆盖前面的

var a = 10; let a = 10; console.log(a);//Uncaught SyntaxError: Identifier 'a' has already been declared let a = 10; let a = 15; console.log(a);//Uncaught SyntaxError: Identifier 'a' has already been declared

5.let不会成为全局对象的属性

最新回复(0)