前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript中var与新定义的ES6中的let的区别

JavaScript中var与新定义的ES6中的let的区别

作者头像
淼学派对
发布于 2022-11-20 03:23:41
发布于 2022-11-20 03:23:41
41200
代码可运行
举报
文章被收录于专栏:云开发小程序1云开发小程序1
运行总次数:0
代码可运行

什么是JavaScript:

JavaScript最初由NetscapeBrendan Eich设计,最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java,但JavaScript的主要设计原则源自Self和Scheme。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与Sun微系统达成协议的结果。微软同时期也推出了JScript来迎战JavaScript的脚本语言。

JavaScript中变量的定义:

var(定义变量):

1.var声明作用域:

举例:使用var再一个函数内定义一个变量时,就意味着该变量在函数结束退出时被销毁!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function test(){
     var testone = 'hi'
    // console.log(lqj);
}
test();
console.log(testone);

比如以上写法,用var定义的变量名testone定义在函数代码作用域中,如果再函数作用于外对此变量名进行一系列的操作会出现报错!

如果,我们不用var定义变量名的话,即(将testone定义成全局变量)则不会出现以上报错的情况!(如下:)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function test(){
     testone = 'hi'
    // console.log(lqj);
}
test();
console.log(testone);

 如果将var去掉此变量名将会成为全局变量,也就是或以后在后面再写代码是遇到需要使用此变量的时候可以,先调用后,即可对此变量名进行一系列的操作!

 如果在开发中为零方便一次定义多个变量,用逗号将所有的要定义的变量名隔开(如下:)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var qqq=1,
    lll=2,
    www=3;
    console.log(qqq+'\n'+lll+'\n'+www)

 注意:在连接键与字符时用+链接!

2.var声明提升

使用var定义变量名时,var这个关键字会自动提升到函数的最顶部位置!(声明提升)

如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function lqj(){
    console.log(qqq);
    var qqq=26;
}
lqj();

这样运行时是不会报错的,因为ES将它自动看成了,如下(声明提升!)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function lqj(){
    var qqq=26;
    console.log(qqq);
}
lqj();

let声明变量:

let与var声明变量时是差不多的,但是了let声明的范围是块作用域内,而var声明的范围是函数作用域内!

举例:

var:因为声明的范围为函数作用域所以,第二个console.log也可以运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (true){
    var age=26;
    console.log(age);
}
console.log(age);

 let:因为声明的范围为块作用域所以,第二个console.log不可以运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (true){
    let age=26;
    console.log(age);
}
console.log(age);

声明let时遇到的暂时性死区!!!

因为声明let时,let不会像var那样自己进行声明提升,所以有时在开发时候会形成一个暂时性死区(js中定义的let变量不运行或报错!)

如下:

let:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(lqj);
let lqj = 26;

全局变量中var与let的不同:

let在全局变量作用域中声明的变量不会成为window对象属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let lqj = 26;
console.log(window.lqj);

而var则可以!!!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var lqj = 26;
console.log(window.lqj);

 for循环中的let与var的不同(let的重要性):

在for循环中使用var来定义一个变量时会出现此变量渗透到循环体外部的问题!(如下:)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (var i = 0;i < 5;i++){
    // setTimeout(()=> console.log(i))
}
console.log(i)

如果将var关键字改为let的话就不会存在这个问题! (如下:)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (let i = 0;i < 5;i++){
    // setTimeout(()=> console.log(i))
}
console.log(i)

在for循环中用let定义一个变量名时,不会出现渗透到循环体以外的情况,如上图所示,循环体以为的操作对循环题内用let定义的i,是无效的! 

对于循环时的迭代变量循环导出问题(var与let):

var:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (var i = 0;i < 5;i++){
    setTimeout(()=> console.log(i))
}

用var变量来实现一个迭代变量的循环导出时会出现以上的bug!!! 

let:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (let i = 0;i < 5;i++){
    setTimeout(()=> console.log(i))
}

用let来处理循环中的迭代导出时则不会出现此bug!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
腾讯云录音文件识别
帮助文档:https://cloud.tencent.com/document/product/1093/38351
算法发
2020/08/04
13.7K0
腾讯云录音文件识别
Android 百度语音合成 (含离线、在线、API合成方式,详细步骤+源码)
  我之前写过百度的语音识别,也写过讯飞的语音识别与合成,而有读者看完后说没有百度的语音合成,想在用百度语音识别的同时使用百度的语音合成。所以就有了这篇文章,我的文章也是区别于其他人的文章,所以我有自己的风格。
晨曦_LLW
2021/05/10
3K0
Android 百度语音合成 (含离线、在线、API合成方式,详细步骤+源码)
腾讯云 实时语音识别介绍及其Android SDK Demo搭建
实时语音识别API地址:https://cloud.tencent.com/document/product/1093/35799
HI hero
2020/04/30
5.6K0
腾讯云 实时语音识别介绍及其Android SDK  Demo搭建
Agora SDK 在Android中的使用(在线视频通话)
一.集成 1.注册账号创建项目 其中最重要的要数 App ID 了 2.下载Agora SDK 二、学会看示例代码(可跳过) 1.整体了解项目结构(1v1的视频通信示例) 以前看一个Andro
Android技术干货分享
2019/05/15
1.6K0
【Unity】QQ登录SDK接入(Unity&Android)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
2.9K0
Android 天气APP(四)搭建MVP框架与使用
现在这样固然符合网络请求的标准,结果也得到了,但是这只是一个接口而已,我们用了这么多代码,那假如这个页面上还有好几个接口要请求访问,岂不是多出了很多的重复代码,这一点并不符合现在Android的现状,所以需要封装OKHttp,通过架构或者框架来完成这一步,前期虽然麻烦一些,但是你一旦用习惯了,就停不下来了,接下来我尽量用人话来讲述这个搭建过程。 为了让你有一个清晰的思路,这里创建一个模块,里面搭建MVP框架。
晨曦_LLW
2020/09/25
1K0
Android  天气APP(四)搭建MVP框架与使用
Android调用相机与相册的方法
Android调用相机与相册的方法 操作流程 点击拍摄 效果图 点击相册选择 效果图 拒绝权限的情况 效果图 功能实现 项目配置 1.先在项目根目录的build.gradle的repositories添加: 2.在build.gradle(:app)的dependencies添加: 3.添加提示dialog样式 4.添加底部dialog样式 底部dialog弹出动画(dialog_in_anim.xml) 底部dialog关闭动画(dialog_out_anim.xml) 5.添加权限 6.在Android
是阿超
2022/08/07
2K0
Android调用相机与相册的方法
使用腾讯OCR光学识别名片集成至ZOHO CRM-总结-安卓开发
腾讯OCR光学识别官网介绍:(https://cloud.tencent.com/document/product/866/36214)
no怕不了木
2023/08/07
6630
使用腾讯OCR光学识别名片集成至ZOHO CRM-总结-安卓开发
Android:使用百度地图SDK定位当前具体位置(类似QQ发表说说的选择地点功能)
从百度地图SDK官网下载demo,里面有我们需要的jar包和so文件。 将locSDK_XXX.jar包和 armeabi文件夹以及其中的liblocSDKX.so文件复制粘贴到libs文件夹下。并添加到构建路径。
张拭心 shixinzhang
2022/11/30
1.2K0
Android 检測网络是否连接[通俗易懂]
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/> <uses-permission android:name=”android.permission.ACCESS_WIFI_STATE”/>
全栈程序员站长
2022/07/07
5500
Android 蓝牙开发(扫描设备、绑定、解绑)
公司最近给我丢了一个蓝牙开发的项目,不了解怎么办呢,那当然是从最基础的开始了,所以这里相当于做笔记了。
晨曦_LLW
2020/09/25
5K0
Android 12 蓝牙适配
  在我的申请下,公司终于购买了一台基于Android12.0的手机,然后我就开心的拿去安装测试了,发现程序崩溃了,于是我这里就写下来,Android12.0的蓝牙适配方法。
晨曦_LLW
2022/04/27
2.2K0
Android 12 蓝牙适配
手把手教你Android端微信支付接入
  在你的package目录下,创建wxapi目录,比如说我使用的demo项目,wxapi就在目录net.sourceforge.simcpux目录下
顾翔
2019/12/12
1.3K0
手把手教你Android端微信支付接入
如何基于 ZEGO SDK 实现 Android 一对一音视频聊天应用
疫情期间,很多线下活动转为线上举行,实时音视频的需求剧增,在视频会议,在线教育,电商购物等众多场景成了“生活新常态”。
音视频开发进阶
2022/10/31
1.3K0
Android 百度文字识别(详细步骤+源码)
  要使用百度文字识别,自然免不了要注册该平台的账号,否则凭什么让你使用,点击百度智能云进入,没有账号的可以先注册账号,注册应该就不用我讲解了吧?这里默认都有账号了,然后登录。
晨曦_LLW
2020/11/24
2.1K0
Android 百度文字识别(详细步骤+源码)
Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin版
之前写了一个蓝牙的小Demo,看的人还是有一些的,也有人私信我说,在学Kotlin,能不能出一版Kotlin的博客讲述这个蓝牙开发,这个想法还是不错的,不过就怕写了没有人看,因为在国内Kotlin是受众群体确实比较少,当然了也是有大的方向在往这边推动的,但是小公司依然不会去用Kotlin,如果你看不惯我这个说法也不要告诉我。我只是把这个博客当成是笔记而已,如果能在写作的时候帮助到别人也是乐意的,不能就自勉吧。
晨曦_LLW
2020/11/18
5.3K0
Android MVVM框架搭建(七)Permission、AlertDialog、拍照和相册选取
  在上一篇博客中完成了新闻详情数据的查看以及用户的注册登录,这篇文章中将对用户的信息进行增加和修改。会使用到文件读写、相机权限、自定义Dialog、相册选取和相机拍照。
晨曦_LLW
2021/12/19
1.6K0
Android MVVM框架搭建(七)Permission、AlertDialog、拍照和相册选取
Android app自动更新总结(已适配9.0)
接下来是工具类,来自github,参考,https://github.com/vondear/RxTool
Android技术干货分享
2019/05/13
2K0
Android 更换头像(拍照、相册选取)
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
晨曦_LLW
2021/03/05
2.4K0
Android 更换头像(拍照、相册选取)
android微信支付
compile ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+’
tea9
2022/07/16
2.6K0
android微信支付
推荐阅读
相关推荐
腾讯云录音文件识别
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 什么是JavaScript:
  • var(定义变量):
    • 1.var声明作用域:
    • 比如以上写法,用var定义的变量名testone定义在函数代码作用域中,如果再函数作用于外对此变量名进行一系列的操作会出现报错!
    • 如果,我们不用var定义变量名的话,即(将testone定义成全局变量)则不会出现以上报错的情况!(如下:)
    •  注意:在连接键与字符时用+链接!
    • 2.var声明提升
    • 使用var定义变量名时,var这个关键字会自动提升到函数的最顶部位置!(声明提升)
    • 如下:
  • let声明变量:
    • 声明let时遇到的暂时性死区!!!
    • 全局变量中var与let的不同:
    •  for循环中的let与var的不同(let的重要性):
    • 对于循环时的迭代变量循环导出问题(var与let):
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档