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

let 与 var 的区别

作者头像
用户9914333
发布2022-07-21 20:01:26
4620
发布2022-07-21 20:01:26
举报
文章被收录于专栏:bug收集bug收集

bug收集:专门解决与收集bug的网站

网址:www.bugshouji.com

01

声明后未赋值,表现相同

let、var申明变量未赋值,都输出undefined. 表现相同

代码语言:javascript
复制
'use strict';

(function() {
  var varTest;
  let letTest;
  console.log(varTest); //输出undefined
  console.log(letTest); //输出undefined
}());

02

使用未声明的变量,表现不同

使用var申明的变量,会进行提升,而let申明的变量,则不会提升

所以,有如下结果

代码语言:javascript
复制
(function() {
  console.log(varTest); 
  //输出undefined(注意要注释掉下面一行才能运行)
  console.log(letTest); 
  //直接报错:ReferenceError: letTest is not defined

  var varTest = 'test var OK.';
  let letTest = 'test let OK.';
}());

03

重复声明同一个变量时,表现不同

var可以重复申明相同的变量,后面的会覆盖前面的

let不可以重复申明相同的变量,会报错,变量已经存在

代码语言:javascript
复制
'use strict';

(function() {
  var varTest = 'test var OK.';
  let letTest = 'test let OK.';

  var varTest = 'varTest changed.';
  let letTest = 'letTest changed.'; 
  //直接报错:SyntaxError: Identifier 'letTest' has already been declared

  console.log(varTest); 
  //输出varTest changed.(注意要注释掉上面letTest变量的重复声明才能运行)
  console.log(letTest);
}());

04

变量作用范围,表现不同

var只全局变量与局部变量之分,没有块级作用域

let有块级作用域

代码语言:javascript
复制
'use strict';

(function() {
  var varTest = 'test var OK.';
  let letTest = 'test let OK.';

  {
    var varTest = 'varTest changed.';
    let letTest = 'letTest changed.';
  }

  console.log(varTest); 
  //输出"varTest changed.",内部"{}"中声明的varTest变量覆盖外部的letTest声明
  console.log(letTest); 
  //输出"test let OK.",内部"{}"中声明的letTest和外部的letTest不是同一个变量
}());

05

经典例子

使用 var 定义变量 i ,循环体中使用 setTimeout 输出 i , 代码如下:

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

结果:5个5

只需要将上面 for 循环中用 var 定义的变量 i ,改变成用 let 定义,和刚输出结果完全不一样,输出结果为:0,1,2,3,4,因为 let 不可以重复声明变量

06

总结

let

定义变量,只能申明一次、有块级作用域、申明不会提升

var

定义变量,可以申明多次、没有块级作用域、申明会提升

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档