21xrx.com
2024-12-23 02:48:58 Monday
登录
文章检索 我的文章 写文章
JavaScript变量声明详解:var、let和const的区别
2023-06-15 16:20:13 深夜i     --     --
var let const

JavaScript变量声明详解:var、let和const的区别

在JavaScript编程中,变量是一个重要的概念。语言中存在多种声明变量的方式,包括关键字var、let和const。那么,这些方式有何不同,应该如何选择呢?

var

在ES5中,使用var关键字声明变量是最常见的方式。它可以用来声明一个全局范围或函数范围内的变量。

例如:


function foo() {

 var x = 3;

 console.log(x); // 3

}

console.log(x); // ReferenceError: x is not defined

需要注意的是,使用var声明的变量存在函数作用域。也就是说,在函数内部声明的变量在函数外部是无法访问的:


function foo()

 var x = 3;

console.log(x); // ReferenceError: x is not defined

当我们在同一个作用域内再次声明同名的变量时,后面的声明会覆盖前面的声明:


function foo() {

 var x = 3;

 var x = 'Hello';

 console.log(x); // 'Hello'

}

在for循环等语句中常常用var来声明计数器变量:


for (var i = 0; i < 10; i++) {

 console.log(i);

}

console.log(i); // 10

需要注意的是,这里的i实际上是var命令声明的全局变量,所以在循环体外也可以访问到。

ES6之后的新特性let

在ES6中,新增了let命令,用来声明块级作用域的变量。与var不同的是,使用let声明的变量在当前块作用域内有效,在声明之前无法引用。

例如:


{

 let x = 'Hello';

 console.log(x); // 'Hello'

}

console.log(x); // ReferenceError: x is not defined

在同一个块级作用域内不允许重复声明同名变量:


 let x = 'Hello';

 let x = 3; // SyntaxError: Identifier 'x' has already been declared

当for循环循环体内部存在let命令声明变量时,每次循环都会创建一个新的变量:


for (let i = 0; i < 10; i++) {

 console.log(i);

}

console.log(i); // ReferenceError: i is not defined

const

const命令用来声明一个块级常量,一旦声明,变量的值就不能改变。与let一样,const也存在块级作用域,不存在变量提升现象。

例如:


const PI = 3.1415;

PI = 3; // TypeError: Assignment to constant variable

需要注意的是,const声明的变量必须初始化。一旦声明后就不能改变值,否则会抛出TypeError错误:


const x; // SyntaxError: Missing initializer in const declaration

x = 3; // TypeError: Assignment to constant variable

常量也可以是一个复合类型的数据,如对象或数组。当修改其中的值时,也会抛出TypeError错误。


const obj = {name: 'Tom'};

obj.name = 'Jerry'; // 可以修改属性值

obj.age = 18; // 可以添加新属性

obj = {name: 'Lucy'}; // TypeError: Assignment to constant variable.

三个

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复