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声明变量的学习的更多相关文章

  1. 【学习总结】声明变量在@interface括号中与使用@property的区别

    方式一:直接在.h文件@interface中的大括号中声明. @interface Test : NSObject { NSString *str; // 私有变量 , 其他类无法访问,只能够该类内部 ...

  2. es6中的let声明变量与es5中的var声明变量的区别,局部变量与全局变量

    自己通过看typescript官方文档里的let声明,与阮一峰老师翻译的的es6学习文档,总结以下三点 1.var声明可以多次重复声明同一个变量,let不行 2.let变量只在块级作用域里面有效果,v ...

  3. ES6中6种声明变量的方法

    相关阅读:http://es6.ruanyifeng.com/#docs/let 相关阅读:https://www.cnblogs.com/ksl666/p/5944718.html 相关阅读:htt ...

  4. ES6学习之const声明常量的学习

    在ES中const关键字用来声明常量,const声明的一经定义不能修改 和let特性差不多, ; console.log(a); a = ; //报错 const定义完常量后必须赋值,后面不允许再次赋 ...

  5. ES6 中的let 声明变量

    1.let是声明的是块级变量,不会污染全局,一般条件与循环中会用到: 2.let  不可以变量提升: 3.let不遵循作用域,一个作用域内如果有该变量,就不会到全局去找,也不可以在一个作用域重复声明一 ...

  6. 一道关于js声明变量,var和let的面试题

    function aa(flag) { // var test // 变量提升,函数最顶部 if(flag) { var test = 'hello man' } else { //此处访问 test ...

  7. ES6 - 基础学习(2): 新的变量声明方式 let 与 const

    ES6)新增加了两个重要的 JavaScript 关键字:let 和 const.以前声明变量时只有一种方式:var,ES6对声明方式进行了扩展,现在可以有三种声明方式了. 1.var:variabl ...

  8. HttpRunner学习5--使用variables声明变量

    前言 在HttpRunner中,如果需要声明变量,可以通过关键字 variables 来完成,要引用声明的变量,则是通过 $+变量名 (如 $token )来实现.variables 可以在 conf ...

  9. 【JS学习】var let const声明变量的异同点

    [JS学习]var let const声明变量的异同点 前言: 本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述 ...

随机推荐

  1. Django学习---信号

    Django学习之信号 如果我想对所有在数据库创建数据的时候记录一条日志. 比如我们在django中往数据库中增加一条数据,希望生成一条操作日志,或者在数据保存和数据保存之后都保存一条操作日志,那我们 ...

  2. 一些linux知识和http知识

    1 yum安装比源码编译安装  有的模块不能自定义安装  只能安装默认的模块进行安装 2 关于php的fastcgi 如果使用fastcgi 那么需要启动服务  如果不使用fastcgi 那么不需要启 ...

  3. Python实践练习:疯狂填词

    题目 创建一个疯狂填词(Mad Libs)程序,它将读入文本文件,并让用户在该文本文件中出现 ADJECTIVE.NOUN.ADVERB 或 VERB 等单词的地方,加上他们自己的文本. 例如,一个文 ...

  4. nodepad++快捷键

    在用notepad++进行代码编辑的过程中,其实notepad++也可以进行单行.多行.区块注释和取消注释的....... 快捷键如下: 单行.多行注释              //方式       ...

  5. U3D SCENEMANAGER.LOADSCENE是半异步的

    作地图加载优化时用到了SceneManager.LoadScene,发现它执行后立即执行了后面的语句,查文档才知道 它是 semi-asyncronize的,即半异步的. 说它是半异步,是因为,它本身 ...

  6. pymysql.err.IntegrityError: (1062, "Duplicate entry 'roxml-ROXML' for key 'PRIMARY'")

    在<Python数据挖掘-概念.方法与实践>一书的第3章实体匹配中,如果一路按照作者的代码及SQL语句进行配置运行的话,会出现如题目所示的错误.根据python脚本的执行错误提示显示,错误 ...

  7. S 导员工信息

    EXCEL模板 [Public] ConnectString=host="siebel://10.10.1.174:2321/SBA_NR_DEV/SMObjMgr_chs ConnectU ...

  8. 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息

    现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...

  9. ORM是什么?如何理解ORM?

    一.ORM简介         对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使 ...

  10. api.besttool.cn 相关接口的返回码code含义列表

    code 含义 0 请求成功 100 接口不存在 101 appid错误 102 secret错误 103 参数错误