es6语法

110 阅读3分钟

“携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

es新增语法

let

ES6新增了声明变量的关键字let let 和 var 的区别

  1. es6新增了块级作用域的概念 let 声明变量遵循块级作用域,和var类似,函数内可以使用函数外的变量,但是函数内不可以用函数外的变量,块级内可以用块外用let声明的变量,块外不能用块里面let声明的变量
var a='vara';
function test(){
    var b='varb'
    console.log(a);
}
test();
console.log(b)

image.png 可以看到函数里正常访问变量a, 函数外访问不到变量b;

let a='leta';

{
    console.log(a);
    let b="let b"
    
}
console.log(b);

image.png 块里正常访问块外的变量,块外访问不到块里的变量 2. let 不存在变量提升,var存在变量提升

console.log(a);
var a='a'

打印 undefined,但是不会报错

image.png 原因是var和function 关键字声明的变量和函数,js引擎会自动把这些声明提升到最顶部

// 这段代码解析前
console.log(a);
var a='a'
// 解析时如下
var a;
console.log(a);
a='a'
  1. let 暂时性死区 在块里面,在定义前使用变量,会报错不能在初始化之前使用变量,这个科学的叫法就是叫暂时性死区,如果你后面不定义这个变量,最多也就报错这个变量没有定义,但是你定义了就会明确告诉你,不能在定义之前使用
  2. let 定义变量同一个作用域不可重复定义,var 可以定义多次,后面的会覆盖前面的,很不安全。 总结:建议用let 替代var声明变量,会从语法层面避免定义重复变量名称产生的bug,块级作用域防止变量污染。防止在定义之前使用变量等错误

const

块级作用域/不存在变量提升/暂时性死区和let一摸一样。 和let不同点 const 声明时必须要赋值,cosnt 从一而终,一生只能赋值一个值,所指向的值或者内存地址不可以改变。这两个特点,但是当const的值是个引用类型,比如对象时,这个对象的属性是可以改变的,但是这个对象本身是不可以改变的

image.png

箭头函数

箭头函数是function的语法糖

var fn1=function(){}
let fn2=function(){}

当函数体中只有一句return语句时,可以省略大括号

var fn1=(x,y)=>{
  return x+y
}
//简单写法
var fn1=(x,y)=>x+y;

如果只有一个子菜单,可以省略小括号

var fn1=(x)=>x.length;
//简写
var fn1=x=>x.length;

箭头函数不能被call,bind,apply绑定this,箭头函数中的this,是函数定义所在的上下文的this,不会像function函数一样,谁调用,this就指向谁。不专一,- 箭头函数的优点在于解决了this执行环境所造成的一些问题。比如:解决了匿名函数this指向的问题(匿名函数的执行环境具有全局性),包括setTimeout喝setInterval中使用this所造成的问题