es6基础知识

【1】ES6中的let和const

let基础语法
let 变量名=变量值

使用let创建变量和使用var创建变量的区别?

(1)let没有变量提升
ES6中只提供了创建变量的新语法标准(let)创建函数还是沿用ES5中的function(还会存在变量提升)如果想让函数也存在变量提升,都使用函数表达式赋值的方式操作:
let fn=function(){ }

所以
创建变量 let xxx=xxx;
创建函数 let xxx=function(){ }
创建自执行函数 (function(){ })();

这样处理的好处:
此时代码中就不要再考虑变量提升了,只要这样处理,没有所谓的变量提升
(要不有的提升 有的不提升容易晕 所以就直接都用let xxx=函数表达式)

(2)使用let定义的变量不允许在同一个作用域中重复声明

let str="111";
let str="222";
console.log(let);

当前报错 Uncaught SyntaxError:Identifier “str” has already been declared,
上面代码也不会执行(在JS代码执行之前就已经知道有重复声明了,也就是浏览器依然存在类似于变量提升的机制:在JS代码之前先把所有let声明的变量定义一遍,发现有重复的直接报错)

在这里插入图片描述
当前作用域下别重复声明即可
(不同作用域中的变量是自已私有的,名字重复没有关系)

let num=12;
num=13;
console.log(num)//--->13
// let 不允许重复声明,但是允许重新赋值

如果我先 var att=300; 再 let att=400 也会报错
也就是说不管你之前用什么方式在当前作用域中声明的变量,再使用let声明的时候 都会报错
在这里插入图片描述
在这里插入图片描述
let也存在私有变量和作用域链的概念,和ES5中基本上差不多

(3)暂时性死区:不可以提前使用未被定义的变量
ES5中当前变量不存在,但是使用typeof检测的时候,不会提示错误,而是返回undefiend

console.log(typeof num);—》unfeined

但是:如果我在下边加了个 let=num

console.log(typeof num);—》报错
let=num

ES6中检测一个没有被声明过的变量直接报错,不像之前ES5中的值是undefined一样了

let=num
console.log(typeof num);—》undefined
只声明 没有定义
默认值就是undefined

(4)ES6语法创建的变量(let)存在块级作用域 ES5语法创建变量(var/function)没有块级作用域

【在ES5中】
window全局作用域
函数执行形成的私有作用域

【在ES6中】
除了有ES5中的两个作用域,ES6中新增加块级作用域(我们可以把块级作用域理解为之前学习的私有作用域:存在私有变量和作用域链的一些机制)
ES6语法中把大部分用大括号包起来都称之为块级作用域

在这里插入图片描述
当前JS并没有开启严格模式,所以形参变量和实参集合存在映射机制(但是:我们以后尽量不要这样处理:因为ES6编译为ES5后,会默认的开启严格模式,映射机制会中断,此处的值依然是"猴七",这样导致我们的ES6结果和ES5结果不一样)

在这里插入图片描述
判断体也是一个块级私有作用域,
在这个作用域中声明的变量是私有变量,在块级作用域之外是无法使用的

在这里插入图片描述
循环体也是一个块级作域 每一次循环都会形成一个新的块级作用域 当前案例形成5个块级作用域
每一个块级作用域都有一个私有变量i 分别存储的是0到4

在这里插入图片描述
这是一个ES6中标准的块级作用域

在这里插入图片描述
虽然ES6没有变量提升,但是每一次进入当前作用域都会把let定义的变量找一遍(不提升但是找了,找到了说明当前作用域中是有这个变量的,提前用都会报错)

在这里插入图片描述
try catch 中任何大括号都是块级作用域

switch 也是块级作用域

for in 也是块级作用域

大部分我们遇到的大括号操作都是 ------> 块级作用域

ES6增加块级作用域的作用?
eg:选项卡

【2】const的基础语法


const的细节知识点和let一样,和let的主要区别在于:let是创建变量,const是创建常量

变量:值是可以修改的
常量:值不能被修改

在这里插入图片描述
而且使用babel如果遇到了const设置常量 再进行修改 就无法进行编译了

【3】JS中创建变量方式汇总


var :ES5中创建变量
function:ES5中创建函数
ES5中创建变量或者函数存在:变量提升、重复声明等特征

var :ES6中创建变量
const:ES6中创建常量
ES6中创建的变量或者常量都不可以变量提升,也不可以重复声明,而且还存在块级作用域

class:ES6中创建类的方式
import:ES6中模块导入的方式

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值