ES6学习之let声明变量的学习
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
}
上面for声明i的小括号可以看做是一个父级作用域,{}执行体可以看做是子级作用域,具体for为什么可以重复声明我也不是很清楚。。
(3)块级作用域{},在es6当中引入块级作用域,每个{}都属于一个块级,然而每个块级的中的变量都是相互隔离的访问不到的
//块级作用域
{
let ooo = 13;
{
let ooo = 18;
console.log(ooo); //
}
console.log(ooo); //
}
{
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
for循环中用var声明的最后输出的是10大家应该都是知道。因为在函数执行的时候i已经变成10了而为什么let声明的却不是10呢,是因为let声明的变量只在本轮循环有效,所以每一次循环i都是一个新的变量,所以最后输出的是6。有点疑惑的是,如果说每次i都是重新声明的,那怎么知道上一轮循环的是多少,从而计算出本轮循环的值?这是因为JavaScript引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。
ES6学习之let声明变量的学习的更多相关文章
- 【学习总结】声明变量在@interface括号中与使用@property的区别
方式一:直接在.h文件@interface中的大括号中声明. @interface Test : NSObject { NSString *str; // 私有变量 , 其他类无法访问,只能够该类内部 ...
- es6中的let声明变量与es5中的var声明变量的区别,局部变量与全局变量
自己通过看typescript官方文档里的let声明,与阮一峰老师翻译的的es6学习文档,总结以下三点 1.var声明可以多次重复声明同一个变量,let不行 2.let变量只在块级作用域里面有效果,v ...
- ES6中6种声明变量的方法
相关阅读:http://es6.ruanyifeng.com/#docs/let 相关阅读:https://www.cnblogs.com/ksl666/p/5944718.html 相关阅读:htt ...
- ES6学习之const声明常量的学习
在ES中const关键字用来声明常量,const声明的一经定义不能修改 和let特性差不多, ; console.log(a); a = ; //报错 const定义完常量后必须赋值,后面不允许再次赋 ...
- ES6 中的let 声明变量
1.let是声明的是块级变量,不会污染全局,一般条件与循环中会用到: 2.let 不可以变量提升: 3.let不遵循作用域,一个作用域内如果有该变量,就不会到全局去找,也不可以在一个作用域重复声明一 ...
- 一道关于js声明变量,var和let的面试题
function aa(flag) { // var test // 变量提升,函数最顶部 if(flag) { var test = 'hello man' } else { //此处访问 test ...
- ES6 - 基础学习(2): 新的变量声明方式 let 与 const
ES6)新增加了两个重要的 JavaScript 关键字:let 和 const.以前声明变量时只有一种方式:var,ES6对声明方式进行了扩展,现在可以有三种声明方式了. 1.var:variabl ...
- HttpRunner学习5--使用variables声明变量
前言 在HttpRunner中,如果需要声明变量,可以通过关键字 variables 来完成,要引用声明的变量,则是通过 $+变量名 (如 $token )来实现.variables 可以在 conf ...
- 【JS学习】var let const声明变量的异同点
[JS学习]var let const声明变量的异同点 前言: 本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述 ...
随机推荐
- eclipse自动生成.apt_generated、factory path
- android手机 ping 虚拟机ubuntu的ip地址
今天使用android手机往虚拟机上ubuntu 上搭建的nginx 和rtmp服务器推送东西的时候,怎么都推不上去. 后来在windows下的cmd里: # adb shell # ping 192 ...
- VLC接收网络串流缓冲时间的计算 (转)
原帖地址:http://blog.csdn.net/coroutines/article/details/7472743 VLC版本2.0.1 最近研究IP-STB音视频同步问题,发现方案自带的自动S ...
- MVC-READ1
将具有不同稳定性的元素融为一体,具有最差稳定性的元素决定了整体的稳定性,这是“短板理论”在软件设计中的体现. MVC的创建者是Trygve M. H. Reenskau,他是挪威的计算机专家,同时也是 ...
- typedef用法和与define的区别
typedef用来声明一个别名,typedef后面的语法,是一个声明.本来笔者以为这里不会产生什么误解的,但结果却出乎意料,产生误解的人不在少数.罪魁祸首又是那些害人的教材.在这些教材中介绍typed ...
- C++ 20170807
mesos/3rdparty/stout/include/stout/err.hpp=======================================================str ...
- 2015年传智播客JavaEE 第168期就业班视频教程06-权限校验子系统介绍
没整过论坛你也整过淘宝,其实淘宝登录的也分商家和个人,卖家和买家,不同的人登录显示的东西是不一样的.权限系统要分两大过程,第四天上午下午分开,分为授权与校验.我把某一个职务给你叫做授权,例如封你为征西 ...
- post传参
1.form表单 2.数据流
- 解决win7和2008连接windows 2003远程桌面很卡的问题
解决win7和2008连接windows 2003远程桌面很卡的问题 来源:http://www.hack1990.com/ 作者:佚名 时间:2013-04-12 TAG: 我要投稿 原因在于从vi ...
- Android登录模块原理及实现
1.需要保持登录状态,在本地保存登录的状态信息. 2.界面布局 3.登录流程 输入信息=>登录成功=>手机号发送验证码=>输入验证码=>登录成功