浅析Js中const,let,var的区别及作用域

如题所述

理解:let变量的作用域只能在当前函数中

早期的JavaScript中,声明变量只能使用var关键字定义变量,并没有定义常量的功能。通过var关键字定义的变量,其作用域只能函数级或是全局作用域,并没有块级作用域。ES6(ECMAScript 2015)对这一问题做了改善,增加了用于定义块级变量的let关键字和用于定义常量的const关键字。

ES2015(ES6) 新增加了两个重要的 JavaScript 关键字:let 和 const。

let 声明的变量只在 let 命令所在的代码块内有效。

const 声明一个只读的常量,一旦声明,常量的值就不能改变。

在 ES6 之前,JavaScript 只有两种作用域:全局变量 与 函数内的局部变量。

var定义变量

1.1 语法及说明

var关键字用于声明一个或多个变量,声明多个变量时使用逗号(,)分隔,声明变量的同时可以对其初始化。

语法法结构如下:

使用var声明变量时,声明的变量作用域是在当前位置的上下文件中:函数的内部(声明在函数内)或者全局(声明在函数外)。

1.2 使用及特点

使用var定义的变量有以下特点:

变量声明提升

无论在代码的任何位置声明变量,执行引擎都会在任何代码执行之前处理。由于这个原因,所以在代码中的任意位置声明变量与在代码开头声明变量是等效的。

这意味着我们可以在定义变量之前使用,这个行为叫做'hoisting',也就是把所有的变量声明移动到函数或者全局代码的开头位置。

注意:虽然变量声明提升让我们可以先使用再定义变量,但建议总是先定义再使用变量,这样可以让变量的作用域更加清晰。

声明与未声名变量的区别

未声明的变量会被添加一个全局作用域,而声明变量作用域是当前上下文:

声明变量在任何代码执行前创建,而未声明的变量只有在执行赋值操作的时候才会被创建:

声明变量是不可配置属性,而未声明变量是可配置的:

以上三点是声明与未声明变量区别,但错误表现是不可预知的。而在 严格模型下,使用未赋值的变量会抛出异常,推荐总是先定义(声明)再使用变量。

全局作用域与函数作用域

函数内部声明的变量只能在函数内部使用,函数外部声明的变量可以全局使用:

let定义块级变量

2.1 语法及说明

let用于定义块级变量,其语法结构类似于var:

var声明的变量是函数级的或者是全局的,而let用于声明块级作用域。

如,使用let声明一个块级变量:

2.2 与var的异同

let与var的区别主要体现在作用域上,当在子代码块中使用中其声明的是块级变量,而var声明的是全局变量:

在函数或程序顶层使用时,let与var没有什么区别:

const定义常量

const用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:

const定义常量与使用let定义变量十分相似:

两者还有以下两点区别:

通过 const 定义的变量与 let 变量类似,但不能重新赋值:

实例块作用域

在块作用域内使用 const 声明的变量与 let 变量相似。

在本例中,x 在块中声明,不同于在块之外声明的 x:

实例

在声明时赋值 JavaScript const 变量必须在声明时赋值:

不是真正的常数 关键字 const 有一定的误导性。 它没有定义常量值。它定义了对值的常量引用。 因此,我们不能更改常量原始值,但我们可以更改常量对象的属性。

原始值 如果我们将一个原始值赋给常量,我们就不能改变原始值:

实例

常量对象可以更改

您可以更改常量对象的属性:

实例

但是您无法重新为常量对象赋值:

实例

常量数组可以更改

您可以更改常量数组的元素:

实例

但是您无法重新为常量数组赋值:

实例

重新声明

在程序中的任何位置都允许重新声明 JavaScript var 变量:

实例

在同一作用域或块中,不允许将已有的var或let变量重新声明或重新赋值给const:

实例

在同一作用域或块中,为已有的 const 变量重新声明声明或赋值是不允许的:

实例

在另外的作用域或块中重新声明 const 是允许的:

实例

提升

通过 var 定义的变量会被提升到顶端。如果您不了解什么是提升(Hoisting),请学习提升这一章。

您可以在声明 var 变量之前就使用它:

实例

通过 const 定义的变量不会被提升到顶端。

const 变量不能在声明之前使用:

实例
温馨提示:内容为网友见解,仅供参考
无其他回答

浅析Js中const,let,var的区别及作用域
let用于定义块级变量,其语法结构类似于var:var声明的变量是函数级的或者是全局的,而let用于声明块级作用域。如,使用let声明一个块级变量:2.2 与var的异同 let与var的区别主要体现在作用域上,当在子代码块中使用中其声明的是块级变量,而var声明的是全局变量:在函数或程序顶层使用时,let与var...

深入理解JS:var、let、const的异同
1. 作用域不同:var 的变量作用域是全局或函数块,而 let 和 const 的作用域更精细,仅限于它们所在的代码块,包括嵌套的 if、for等结构。2. 声明重复性:var 允许在同一作用域内重复声明,let 则不允许,否则会报错。let 的检查在词法分析阶段完成。3. 变量绑定:var 在全局环境中会直接绑定到...

javascript?变量声明?var,let,const?的区别
局部作用域是在函数内部的作用域。在局部作用域定义的变量只能在该作用域以及其子作用域被访问。JavaScript中,变量声明使用var、const、let来声明变量,var为ES5的语法,const和let为ES6之后的语法。ES6 的let和const为新引入的关键字,它们不会被提升,而且是块作用域。也就是说被大括号包围起来的区域...

【JavaScript】你从未如此了解const、let与var
var变量可重复声明和修改,但在严格模式下会抛错。2. let的革新let引入了块级作用域,避免了var的全局污染和意外覆盖。let变量不可重复声明,但可以修改,但不能在声明前使用。3. const的稳定性const用于声明常量,保持值不变,同样有块级作用域。const声明的变量不可修改,包括引用的复合数据类型。con...

JavaScript中变量声明var、let、const的区别
在JavaScript中,变量声明的三种关键字——var、let、const,各自拥有不同的特性与用途。首先,var关键字用于声明全局作用域或函数作用域的变量。在函数外声明的var变量将被挂载于window对象上,全局访问。函数内部声明的var变量同样具有全局作用域,如果未明确指定作用域,变量将自动成为全局变量。var声明的...

JavaScript中var,let,const 的区别
JavaScript中的var、let和const各有其独特的特性,它们在变量声明和作用域管理上有所不同。var是最早的声明方式,具有函数作用域,变量提升且全局变量会挂载到window上。虽然可以重复声明,但全局变量覆盖局部,且变量值不会在声明前自动初始化。let引入了块级作用域,变量没有提升,需要先声明后使用。同一...

var,let,const区别
理解 var、let、const 的区别有助于在 JavaScript 中更有效地管理变量。首先,var、let、const 都可用来定义变量,但它们在作用域和提升行为上有所不同。let 和 const 不支持变量提升,而在声明时立即分配内存空间。这意味着在声明之前尝试访问变量将会抛出引用错误。对比之下,var 的变量提升特性允许在...

JavaScript中var,let与const之间有什么区别
var,let和const的区别在于:var的变量声明在代码执行前且工作范围在当前执行的上下文中,let是允许创建一个变量但只作用在它的块里,const与let什么相似唯一的差别是const定义的变量不可更改本篇文章主要是通过在JavaScript (ES6) 中创建变量的方法来介绍var、 let和const之间的区别,具有一定的参考作用,...

JavaScript中var、let和const的区别
首先在全局作用域下使用let和const声明变量,变量并不会被挂载到window上(var声明的变量会),这是和var声明的区别之一。接下来当在声明a之前如果使用了a,就会出现报错的情况 关于这个报错情况,首先报错的原因是因为存在暂时性死区,所以不能在声明前就使用变量,这也是let和const优于var的一点。虽然变量...

① - var、let、const - JS变量声明和作用域
const与let除此之外没有其他区别,故以下讨论只区分var和let,对const的理解可以直接带入let。作用域 var作用域 var声明作用于全局或函数内,声明在函数内的作用于该函数内,声明于函数外的作用于全局。(可不妨理解为叫“函数内作用域”。)块作用域 let和const均为块(大括号)作用域。变量仅在该...

相似回答
大家正在搜