博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6学习之let声明变量的学习
阅读量:5297 次
发布时间:2019-06-14

本文共 1447 字,大约阅读时间需要 4 分钟。

1.let和var类似,

(1)let与var不同的点:let没有预编译,变量提升这个过程,let声明的变量只能在当前作用域内访问到(一个{}可以看做是一个作用域),在全局var声明的变量属于window,而let声明的不属于

 

let a = 12;    (function () {        console.log(a);          let a = 5;    }());

    可见上面代码中是会报错的,如果a是var声明的,那么就不会报错、输出a的值是undefined

 

(2)虽然说let声明的变量不允许重复声明,但是在for循环中貌似又是可以的

for (let i = 0; i < 10; i++) {        let i = "abc";        console.log(i);    //这里输出的是abc    }
View Code

    上面for声明i的小括号可以看做是一个父级作用域,{}执行体可以看做是子级作用域,具体for为什么可以重复声明我也不是很清楚。。

(3)块级作用域{},在es6当中引入块级作用域,每个{}都属于一个块级,然而每个块级的中的变量都是相互隔离的访问不到的

//块级作用域    {        let ooo = 13;        {            let ooo = 18;            console.log(ooo);    //18        }        console.log(ooo);    //13    }
View Code

    

{        let ooo = 13;        {                  console.log(ooo);  //报错 (此处为死区)            let ooo = 12;        }        console.log(ooo);    }

(4)let关键字和var关键字在for中的区别

var arr = [];    for (var i = 0; i < 10; i++) {        arr[i]=function(){            console.log(i);        }    }    arr[6]();       //输出的是10        var arr = [];    for (let i = 0; i < 10; i++) {        arr[i]=function(){            console.log(i);        }    }    arr[2]();       //输出的是2
View Code

    for循环中用var声明的最后输出的是10大家应该都是知道。因为在函数执行的时候i已经变成10了而为什么let声明的却不是10呢,是因为let声明的变量只在本轮循环有效,所以每一次循环i都是一个新的变量,所以最后输出的是6。有点疑惑的是,如果说每次i都是重新声明的,那怎么知道上一轮循环的是多少,从而计算出本轮循环的值?这是因为JavaScript引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

转载于:https://www.cnblogs.com/heheblog/p/JavaScript_study_let.html

你可能感兴趣的文章
SDWebImage缓存图片的机制(转)
查看>>
Interpolation methods
查看>>
【Xamarin挖墙脚系列:对设备/模拟器的查看调试监听】
查看>>
Building Web Apps with SignalR, Part 1
查看>>
python 小兵 三元运算符
查看>>
OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章)
查看>>
mongoTemplate更新一个Document里面的数组的一个记录。
查看>>
k8s的port、targetport、nodeport之间的区别
查看>>
简单排序
查看>>
vue中的组件化开发
查看>>
关于百度地图iOS中 paopaoView 警告的处理方法
查看>>
电子产品自动搜索比价系统设计与实现 项目愿景与范围
查看>>
Linux内核模块自动加载机制 .
查看>>
第二次 过程性考核
查看>>
PID optimizer
查看>>
Django 1.6 CBVs
查看>>
Fitnesse用系列三
查看>>
游戏碰撞OBB算法(java代码)
查看>>
Scriptcase演示程序,现在,他们使用SC多么简单的开发系统
查看>>
ZOJ 3623 Battle Ships 简单DP
查看>>