一、let 1.1 学习let,首先我们来看一段代码:

function test(){for(var i=0;i<3;i++){console.log(i)  //1,2}console.log(i)      //3
}test();
复制代码

这组代码中,我们使用的是var来声明变量来循环,所以在循环内打印出1,2。在循环外打印出3,这个应该都是可以理解的。下面来看下let的区别:

function test(){for(let i=0;i<3;i++){console.log(i)  //1,2}console.log(i)      // Uncaught ReferenceError:i is not defined 引用错误
}test();
复制代码

在这里,我们可以看到浏览器报了引用错误---Uncaught ReferenceError,那为什么会报引用错误呢,这里就涉及到标题中提到的作用域的问题。在ES6中,有一个新的概念, 块作用域

1.2 块作用域

代码用{}包裹,就是一个块作用域

所以 ---- let 声明的变量只在自己所在的块作用域中有效,const方法定义的常量也有这样的概念。

一般我们console.log()一个未声明的变量,会报undefined错误,那我们这里为什么会报引用错误呢,不是定义错误?

如果使用了es6,强制开启了严格模式,在es5中使用"use strict"; 严格模式中,变量未声明不能使用,不然就会报引用错误

1.3 let 重复声明同一个变量

function test(){let a = 1;let a =2; // Duplicate declaration "a"  重复声明 a
}
test()
复制代码

所以使用let在同一个作用域不能重复声明同一个变量。


二、const

2.1 常量

在es5中是没有常量的概念的,在es6中引入了const常量。来看一个案例:

function test(){const PI = 3.14;PI = 8 //"PI" is read-onlyconsole.log(PI);
}
test()
复制代码

这里声明了一个常量 PI ,下面我们给PI重新赋值,这个时候浏览器就会报 "PI" is read-only 错误,这个错误的意思就是 PI 只是一个可读属性不能修改。但其实这句话是不严谨的,后面我们会做出解释。

2.2 Unexpected token 这个标题我想大家都认识,是一个错误提示,那const什么情况下会出现这样的错误提示呢

function test(){const PI ; // Unexpected token  (输入的不完整)PI = 8;
}
test()
复制代码

我们先定义了PI常量,但是没有给它赋值,后面我们才赋值为8,但是在浏览器中,出错了,在定义的位置,报**Unexpected token (输入的不完整)** , const 声明的时候是必须赋值,不然就会报错,大家要记住哦。

2.3“修改”const 常量 看到标题大家可能都比较疑惑啊,之前还说不能修改常量的值,现在怎么变了。其实我们的修改是引号引起来的,所以就不是真正的修改了常量,只是看起来是这样而已。

function test(){const PI = 3.14; const k = {a:1};k.b = 3;   // console.log(PI, k); // 3.14 a:1,b:3
}
test()
复制代码

在这部分代码中,我们定义了k对象,然后给k添加了b = 3;这个时候我们发现,并没有报错,那是为什么呢?

对象允许修改属性,数值等基本类型不允许修改,对象返回的是内存指针,指针不变,就还是同一个对象,这个也是对象中一个知识点,所以我们只是改变了对象中的内容,但是指针不变,也就不存在修改个这个常量了。

下一期,我们来说说 解构赋值

ES6 - let、const与作用域相关推荐

  1. let,const和作用域

    let,const,作用域 es6中新增两个关键字:let 和 const:并且新增"块作用域"这个概念 let命令 在JS中,变量实际创建的位置取决于与如何声明该变量. let基 ...

  2. 关于es6的const跟vuex里的getter

    es6的const跟vuex里的getter定义变量后变量不可变,但是定义对象时对象属性可变. const如果想对象属性保持不变可以使用Object.freeze(对象)的方法,如果有多层需便利对每一 ...

  3. ES6 let const 关键字

    ECMAScript 和 JavaScript的关系? 前者是后者的规格,后者是前者的实现. 符合ECMAScript 规格的还有 Flash 中的AcionScript 和 TypeScript. ...

  4. ES6中块级作用域下的函数声明

    背景 因为ES5的时候没有块级作用域,所以ES5规定不能再if这样的块中声明函数,但是为了兼容各大浏览器并没有严格遵守这条规定. ES6的时候引入了块级作用域,规定在块级作用域中声明函数就相当于使用l ...

  5. ES6之const命令

    一直以来以ecma为核心的js始终没有常量的概念,es6则弥补了这一个缺陷: const foo='foo';foo='bar';//TypeError: Assignment to constant ...

  6. [ES6] 细化ES6之 -- 块级作用域

    所谓的块级作用域,可能是一个{},一个代码块,一句话 let关键字 let 与 var 区别 区别 var let 变量提升 有 无 作用域 全局作用域.函数作用域 全局作用域.函数作用域和块级作用域 ...

  7. ES6语法---const和symbol

    const 经由const定义的变量,一经定义不可修改 const a = 10; console.log(a);//10 a = 20; console.log(a);//报错显示,不允许重新定义 ...

  8. Es6 之 const关键字

    https://blog.csdn.net/jin_doudouer/article/details/80493649 es6中新增了一个const.就是用来定义一个常量的.以前其实一直没有把这个放在 ...

  9. ES6中 const 关键字

    const声明一个只读的常量.一旦声明,常量的值就不能改变. 定义后可以使用但不能修改 但是,const 定义的对象可能与我们想象的不太一样 定义了对象b ,我们可以在b上添加修改属性,再看一个列子 ...

最新文章

  1. SQL Server 阻止了对组件 \'Ad Hoc Distributed Queries\' 的访问
  2. mysql 联合索引长度_MySQL 中索引的长度的限制
  3. Hadoop2.6.0的FileInputFormat的任务切分原理分析(即如何控制FileInputFormat的map任务数量)...
  4. MySQL不能插入中文字符及中文字符乱码问题
  5. Java应用程序与小程序之间有那些差别?
  6. php 回到顶部,jquery如何实现点击网页回到顶部效果?(图文+视频)
  7. java 发送带basic认证的http post请求实例代码_图解HTTP学习笔记(八)—确认访问用户身份的认证...
  8. Linux的文件权限与目录设置
  9. 动态计算未知盒子的高度
  10. 号称36个月不卡顿!网友:就是有点贵
  11. Verilog 常规数据定义
  12. Packet Tracer 5.0建构CCNA实验攻略2配置vlan
  13. 暗月渗透实战靶场-项目八(上)
  14. 基于java的房屋出租管理系统
  15. 计算机sci二区期刊,图像处理的sci二区期刊有哪些
  16. 打乱魔方软件_家里魔方吃灰了?这三款魔方App教你轻松上手
  17. 笛色青青(2010-11 -07)
  18. tp5学习记录:导入前端静态模板
  19. 类和对象:类与对象定义
  20. 1.MyBatis源码解析-XML解析流程--阿呆中二

热门文章

  1. Windows多线程编程总结
  2. ASP.NET AJAX web chat application
  3. 转 DevExpress-ASPxPageControl 动态添加 TabPage 内容
  4. 【Ray Tracing The Next Week 超详解】 光线追踪2-6 Cornell box
  5. ASP.NET MVC WebAPI实现文件批量上传
  6. JDBC——数据库的隔离级别
  7. Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送
  8. word2007-2010排版中解决段后插入分页符 新页首行空行问题
  9. QTP中使用ExecuteFile加载vbs脚本
  10. FireFox不支持cursor:hand