首页 > 其他分享 >ES6块级作用域let声明和const声明以及与var之间的区别

ES6块级作用域let声明和const声明以及与var之间的区别

时间:2023-02-09 15:00:56浏览次数:47  
标签:块级 const name 作用域 let var 声明

一、ES6块级作用域

let 声明

块级声明用于声明在指定作用域之外无法访问的变量,存在于:

①函数内部
②块内(字符{和}之间的区域)

禁止重声明

(1)如果在作用域由已经存在某个标识,再用let声明时会报错

var name = 'zhang'
let name = 'wang' // 报错

(2)如果在当前作用域内嵌另一个作用域,使可在内嵌的作用域中用let声明同名变量,代码如下:

var name = 'zhang'
if(status){
	let name = 'wang' // 不会报错  
}

const 声明

声明的是常量,一旦被设定后不可更改,所以,每个通过const声明的常量必须进行初始化。

正确:const name = 'zhang';
错误:const name;

const 与 let

相同之处:都是块级标识符,只在当前代码块内有效,不会提升至作用域顶部。
不同之处:无论在严格模式下还是非严格模式下,都不可以为const 定义的常量再赋值,否则会报错。

用const 声明对象

const 声明不允许修改绑定,但允许修改值,也就是说,用const声明对象后,可以修改该对象的属性值,代码如下:

const person = { name : 'zhang' };
// 可以修改对象属性的值 person.name = 'wang'
// 报错 person = { name:'wang' }

临时死区

let和const与var不同,声明的变量不会被提升到作用域的顶部,不可在声明之前访问这些变量。

if(status){
 console.log(typeof value);
 let value = "blue";
}
// 此时的console.log()会报错,此时的value还位于“临时死区”或TDZ中。

全局块作用域绑定

let和const与var的另一个区别是它们在全局作用域中的行为,当var被用于全局作用域时,会创建一个新的全局变量作为全局对象(浏览器环境中的window对象)的属性。var 声明的变量会无意中覆盖一个已经存在的全局属性。代码如下:

var RegExp = 'Hello'
console.log(window.RegExp) // Hello (覆盖)

块级绑定最佳实践

默认使用const,只在确定需要改变变量的值时使用let,这样就可以在某种程度上实现代码的不可变。防止某些错误的产生。

标签:块级,const,name,作用域,let,var,声明
From: https://www.cnblogs.com/zhangzuying/p/17105118.html

相关文章

  • 互联网关于版权声明
    聊聊互联网关于版权声明ox00.前言互联网上的门户网站,常常会在网站的底部放置版权声明,这些版权声明有这不同的写法。其用意旨在提醒访问者,网站的内容是受到版权保护的。网......
  • Java变量、常量、作用域、运算符
    一、变量可以变化的量Java是强类型语言,每一个变量必须声明其类型Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域typevarName[=value][{,var......
  • C 语言函数的定义和声明
    1.函数的声明和定义函数头与函数体两部分组成。其中函数头部分包含函数的返回值类型,函数名,函数的参数;函数体部分由实现函数功能的一条至多条语句组成。返回值类型函数名......
  • Spring声明式事务的工作原理
    Spring事务管理Java后端项目开发中都会用到的一个技术点,每个Java工程师都必须精通。Spring事务管理可以分为两类:声明式事务管理编程式事务管理声明式事务管理只需要......
  • Spring26 - 声明式事务
    声明式事务概念事务基本概念①什么是事务数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分......
  • js中不存在块级作用域 js 230208
    ......
  • ABP的IdentityServer4中使用自定义的claim声明
    ABP的IdentityServer4使用自定义的claim声明,我是想增加一个部门Id,登录用户的中文名称在IdentityServer项目的AbpModule中,context.Services.AddScoped<IProfileServ......
  • Spring:声明式事务
    目录JdbcTemplate简介准备①加入依赖②创建jdbc.properties③配置Spring的配置文件测试①在测试类装配JdbcTemplate②测试增删改功能③查询一条数据为实体类对象④查询多......
  • 数组的声明创建
    publicclassDemo02{publicstaticvoidmain(String[]args){//数组是相同数据类型(数据类型可以为任何类型)的有序集合//数组也是对象。数组元素......
  • 8-变量常量作用域
    变量类变量实例变量局部变量publicclassDemo06{//类变量staticstaticdoublesalary=2500;Stringname;//实例变量,从属于对象,如果不初始化值,......