首页 > 其他分享 >js中let,var区别

js中let,var区别

时间:2023-11-05 14:45:16浏览次数:34  
标签:console 变量 作用域 js let var 声明

在JavaScript中,letvar都是用来声明变量的关键字,但它们有一些重要的区别:

  1. 作用域var在声明变量时具有函数级作用域,而let具有块级作用域。这意味着var定义的变量在整个函数内部都可见,而let定义的变量只在声明它的代码块内可见。

例如:

function test() {
    var x = 10;
    let y = 20;
    console.log(x); // 输出 10
    console.log(y); // 输出 20
}
test();
console.log(x); // 输出 10, 因为x的作用域是整个函数
console.log(y); // 报错,因为y的作用域是声明它的代码块
  1. 暂时性死区(TDZ):对于var来说,只要进入函数或代码块,就可以访问其声明的变量。即使在变量真正被赋值之前,也可以访问它。然而,对于let来说,只要离开声明let变量的代码块或函数,就无法访问这个变量,即使它已经赋值了。这种现象被称为“暂时性死区”。

例如:

function test() {
    console.log(x); // 不报错,输出 undefined,因为x还没有被赋值
    var x = 10;
    console.log(x); // 输出 10
}
test();
  1. 全局作用域:在全局作用域中,使用var声明的变量会成为全局对象(通常是window对象)的属性,而使用let声明的变量不会。
  2. 可重复声明:使用var可以多次声明同一个变量,但使用let不允许。
  3. 提升:JavaScript中有一个概念叫做“变量提升”(hoisting),意思是在执行代码之前,解释器会先读取所有的变量声明。对于var来说,确实存在变量提升。但是对于let来说,虽然变量声明也会被提升,但是只有声明会被提升,赋值部分不会被提升。
  4. ES6中的const:在ES6中引入了一个新的关键字const,用于声明常量。常量在声明之后不能再被重新赋值。constlet一样具有块级作用域。

标签:console,变量,作用域,js,let,var,声明
From: https://www.cnblogs.com/lifajia/p/17810513.html

相关文章

  • linux同步机制-completion
    一、completion1.1什么是completionlinux内核中,完成量completion是一种代码同步机制。如果有一个或多个线程必须等待某个内核活动操作达到某个点或某个特定状态,那么completion完成量可以提供一个无竞争的解决方案。1.2completion的使用1.2.1定义并初始化完成量//方式一......
  • 重定向到 Next.js 应用程序文件夹中的 404 Not Found 页面:分步指南
    问题描述:你希望将所有的404请求重定向到Next.js应用程序文件夹中的404NotFound页面。解决方案:确保你已经在你的Next.js应用程序中创建了一个自定义的404页面。你可以在你的pages目录下创建一个名为404.js(或404.tsx)的文件,并在其中编写你的自定义页面内容。在Next.j......
  • NodeJS系列(13)- Next.js 框架 (六) | Node.js + Next.js + Prisma/Sequelize (ORM) + M
    Next.js是一个用于构建Web应用程序的框架。Next.js是一个用于生产环境的React框架,是一个React服务端渲染应用框架。NextJS:https://nextjs.org/Prisma是一个基于promise的Node.js和TypeScript的ORM,目前支持Mysql,MariaDB,SQLite,PostgreSQL,AWSAuroraServerles......
  • 前端学习-JavaScrip学习-js基础01
    学习教程:黑马程序员视频链接JS简介JS组成JavaScrip=ECMAscript(语言基础)+webAPIwebAPI=BOM+DOM资料查询网站:MDN<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="......
  • kubelet和api server之间的通信
    在k8s集群中,每个节点上都运行一个kubelet服务进程,来和master节点来保持通信。kubelet服务进程默认监听10250端口,来接收来自master发来的指令kubelet和apiserver保持双向通信:接受并执行master发来的指令(通过监听10250端口,watch机制)每个kubelet进程会在APIServer上注册节点自......
  • js tab跟随滑动切换tab
    js:letanchors=document.querySelectorAll("div[data-anchor-index]");letobserver=newIntersectionObserver((entries)=>{entries.forEach((entry)=>{if(entry.isIntersecting){letseq=Number(entry.target.ge......
  • JSONArray 分页
    publicJSONArraydatePageSize(IntegerpageNo,IntegerpageSize,JSONArraydata){JSONArraynewDate=newJSONArray();Integercounts=data.size();//获取数据总数Integerstart=(pageNo-1)*pageSize;//获取开始值Integerend=(pageNo)*p......
  • JS 工具函数
    1、校验数据类型exportconsttypeOf=function(obj){returnObject.prototype.toString.call(obj).slice(8,-1).toLowerCase()}示例:typeOf('树哥')//stringtypeOf([])//arraytypeOf(newDate())//datetypeOf(null)//nulltypeOf(true)//boolea......
  • java开发,json转list集合,原生实现
    java是一门面象对象的语言,对象需要先定义,但是在外理网络请求时候会用到json转成java对象,虽然现代开发框架中也提供了很多工具和方法直接转换,但是作为学习者了解一下底层实现,更能灵活变通现在有一个json格式如下{"list":[{"name":"Tom","sex":"b......
  • 二十六、QT发送http请求并解析返回的json数据
    1.使用的模块和类模块:network类:QNetworkAccessManager、QNetworkRequest、QNetworkReply、QJsonDocument、QJsonObject、QJsonArrayQSslSocket::sslLibraryBuildVersionString();:查看当前使用的ssl版本,访问HTTPS时需要使用、复制libcrypto-1_1-x64.dll和libssl-1_1......