es6 for循环中let和var区别详解


Posted in Javascript onJanuary 12, 2020

let和var区别:

for(var i=0;i<5;i++){
  setTimeout(()=>{
    console.log(i);//5个5
  },100) 
}
console.log(i);//5
console.log('=============')

for(let j=0;j<5;j++){
  setTimeout(()=>{
    console.log(j);//0,1,2,3,4
  },100) 
}
console.log(j);//报错 j is not defined

为什么 用let就可以显示正确结果,而var就不可以呢?

var是全局作用域,有变量提升的作用,所以在for中定义一个变量,全局可以使用,循环中的每一次给变量i赋值都是给全局变量i赋值。

let是块级作用域,只能在代码块中起作用,在js中一个{}中的语句我们也称为叫一个代码块,每次循环会产生一个代码块,每个代码块中的都是一个新的变量j;

es6中不是说let声明变量不能重复声明吗?看下边例子:

{
  let a=123;
}
{
  let a=246;
}
console.log(a);//a is not defined;
{ 
  var b=1;
}
{ 
  var b=2;
}
console.log(b);// 2;

{}代表一个块,这个时候let声明的变量只在这个块中起作用,而这个块对var声明的变量不起作用。因为var是全局作用域。

let a=1;
let a=2;
//Uncaught SyntaxError: Identifier 'a' has already been declared
//let不能重复声明

let b=1;
var b=2;

// Uncaught SyntaxError: Identifier 'a' has already been declared
//let不能重复声明


var c=3;
var c=4;
console.log(c)//4;var可以重复声明

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Ext 表单布局实例代码
Apr 30 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
原生javascript实现简单的datagrid数据表格
Jan 02 Javascript
JavaScript中将数组进行合并的基本方法讲解
Mar 07 Javascript
jQuery中绑定事件bind() on() live() one()的异同
Feb 23 Javascript
PHP实现本地图片上传和验证功能
Feb 27 Javascript
JavaScript中 DOM操作方法小结
Apr 25 Javascript
微信小程序模板(template)使用详解
Jan 31 Javascript
详解vue的diff算法原理
May 20 Javascript
解决axios发送post请求返回400状态码的问题
Aug 11 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
Apr 25 Javascript
javascript实现计算器功能
Mar 30 Javascript
js 计数排序的实现示例(升级版)
Jan 12 #Javascript
JS实现动态无缝轮播
Jan 11 #Javascript
原生js实现无缝轮播图
Jan 11 #Javascript
JS实现轮播图效果
Jan 11 #Javascript
js实现带搜索功能的下拉框
Jan 11 #Javascript
js实现select下拉框选择
Jan 11 #Javascript
js实现二级联动简单实例
Jan 11 #Javascript
You might like
《PHP编程最快明白》第三讲:php数组
2010/11/01 PHP
一个基于PDO的数据库操作类
2011/03/24 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
新浪的图片新闻效果
2007/01/13 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
python中的格式化输出用法总结
2016/07/28 Python
详解Python中where()函数的用法
2018/03/27 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
python中open函数的基本用法示例
2019/09/07 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
关于numpy数组轴的使用详解
2019/12/05 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
Noon埃及:埃及在线购物
2019/11/26 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
英文版餐饮业求职信
2013/10/18 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
2014年度考核工作总结
2014/12/24 职场文书
校本课程教学计划
2015/01/19 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python