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

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

作者头像
淼学派对
发布2022-11-20 11:23:41
3940
发布2022-11-20 11:23:41
举报
文章被收录于专栏:云开发小程序1

什么是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
复制
function test(){
     var testone = 'hi'
    // console.log(lqj);
}
test();
console.log(testone);

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

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

代码语言:javascript
复制
function test(){
     testone = 'hi'
    // console.log(lqj);
}
test();
console.log(testone);

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

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

代码语言:javascript
复制
var qqq=1,
    lll=2,
    www=3;
    console.log(qqq+'\n'+lll+'\n'+www)

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

2.var声明提升

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

如下:

代码语言:javascript
复制
function lqj(){
    console.log(qqq);
    var qqq=26;
}
lqj();

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

代码语言:javascript
复制
function lqj(){
    var qqq=26;
    console.log(qqq);
}
lqj();

let声明变量:

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

举例:

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

代码语言:javascript
复制
if (true){
    var age=26;
    console.log(age);
}
console.log(age);

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

代码语言:javascript
复制
if (true){
    let age=26;
    console.log(age);
}
console.log(age);

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

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

如下:

let:

代码语言:javascript
复制
console.log(lqj);
let lqj = 26;

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

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

代码语言:javascript
复制
let lqj = 26;
console.log(window.lqj);

而var则可以!!!

代码语言:javascript
复制
var lqj = 26;
console.log(window.lqj);

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

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

代码语言:javascript
复制
for (var i = 0;i < 5;i++){
    // setTimeout(()=> console.log(i))
}
console.log(i)

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

代码语言:javascript
复制
for (let i = 0;i < 5;i++){
    // setTimeout(()=> console.log(i))
}
console.log(i)

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

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

var:

代码语言:javascript
复制
for (var i = 0;i < 5;i++){
    setTimeout(()=> console.log(i))
}

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

let:

代码语言:javascript
复制
for (let i = 0;i < 5;i++){
    setTimeout(()=> console.log(i))
}

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是JavaScript:
  • var(定义变量):
    • 1.var声明作用域:
      • 比如以上写法,用var定义的变量名testone定义在函数代码作用域中,如果再函数作用于外对此变量名进行一系列的操作会出现报错!
        • 如果,我们不用var定义变量名的话,即(将testone定义成全局变量)则不会出现以上报错的情况!(如下:)
          •  注意:在连接键与字符时用+链接!
            • 2.var声明提升
              • 使用var定义变量名时,var这个关键字会自动提升到函数的最顶部位置!(声明提升)
                • 如下:
                • let声明变量:
                  • 声明let时遇到的暂时性死区!!!
                    • 全局变量中var与let的不同:
                      •  for循环中的let与var的不同(let的重要性):
                        • 对于循环时的迭代变量循环导出问题(var与let):
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档