ES6 - let与var区别

ES6 - let与var区别 首页 / ES6入门教程 / ES6 - let与var区别

在JavaScript中,关键字varlet都用于声明变量。

let关键字是在后来称为 ES6(ES2015)的JavaScript的更高版本中引入的。这是声明变量的首选方式。

Let Vs Var 函数范围

var函数范围  -  使用var在函数内部声明的变量可以在函数中的任何位置使用。例如,

// 打印文本的程序
// 变量 a 不能在这里使用
function greet() {
   //变量 a 可以在这里使用
    var a = 'hello';
    console.log(a);
}
// 变量 a 不能在这里使用

greet();//hello

在上面的程序中,变量 a var声明。变量 a 可以在函数greet中的任何位置使用。

let 块状  -  用let声明的变量只能在代码块内访问。例如,


// 变量 a 不能在这里使用
function greet() {
    let a = 'hello';

   //变量 b 不能在这里使用
    if(a == 'hello'){
       //变量 b 可以在这里使用
        let b = 'world';
        console.log(a + ' ' + b);
    }

    //变量 b 不能在这里使用
    console.log(a + ' ' + b);//error
}
// 变量 a 不能在这里使用

greet();

输出

hello world
Uncaught ReferenceError: b is not defined

在上面的程序中,变量 a 在函数内部声明,并且可以在函数内部的任何位置进行访问( a 成为函数作用域)。

但是,变量 b 是在if块语句中声明的。 b 将是块作用域的,只能在 if 块内部访问。

因此,当您尝试访问if块之外的 b 时,会发生错误(如程序上方所示)。

Let不可重复声明

1. 可以再次声明用var声明的变量。例如,

var a = 5;//5
var a = 3;//3

let声明的变量不能在同一块或同一范围内重新声明。例如,

let a = 5;
let a = 3;//error 

输出

Uncaught SyntaxError: Identifier 'a' has already been declared

2. 使用var在其他范围或块中重新声明变量也会更改外部变量的值。例如,

var a = 5;
console.log(a);//5
{
    var a = 3;
    console.log(a);//3
}
console.log(a);//3

使用let在不同的范围或块中重新声明变量会将该变量视为不同的变量。并且外部变量的值不变。例如,

let a = 5;
console.log(a);//5
{
    let a = 3;
    console.log(a);//3
}
console.log(a);//5

3. 在循环中使用以var声明的变量时,该变量的值将更改。例如,

var a = 2;
for(var a = 0; a < 3; a++) {
    console.log('hello');
}
console.log(a);//3

在上面的程序中,for循环重新声明变量 a 。因此,最后a的值将更改为 3

在循环中使用以 let 声明的变量时,变量的值不会更改。例如,

let a = 2;
for(let a = 0; a < 3; a++) {
    console.log('hello');
}
console.log(a);//2

在上述程序中,for循环将变量 a 视为与上面声明的变量不同的变量。并且该变量的范围仅在for循环内。因此变量 a 的值最后保留为 2

Let不允许提升

var声明的变量被提升到程序范围的顶部。例如,

console.log(a);
var a;//undefined (not an error)

关键字let不允许提升。例如,

console.log(a);
let a;//Uncaught ReferenceError: a is not defined

如果您想了解有关提升的更多信息,请访问 JavaScript hoisting

let和var浏览器支持

大多数现代浏览器都支持使用let。但是,某些浏览器不完全支持let

要了解更多信息,请访问 JavaScript让浏览器支持

注意:在全局范围内,varlet的行为方式相同。例如,

var a = 5;//5

变量 a 将是全局范围的,并且可以在程序中的任何位置进行访问。

let a = 5;//5

变量 a 将是全局范围的,并且可以在程序中的任何位置进行访问。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

快速上手Kotlin开发 -〔张涛〕

从0打造音视频直播系统 -〔李超〕

移动端自动化测试实战 -〔思寒〕

接口测试入门课 -〔陈磊〕

RPC实战与核心原理 -〔何小锋〕

爆款文案修炼手册 -〔乐剑峰〕

云计算的必修小课 -〔吕蕴偲〕

Go进阶 · 分布式爬虫实战 -〔郑建勋〕

Vue 3 企业级项目实战课 -〔杨文坚〕

好记忆不如烂笔头。留下您的足迹吧 :)