ES6新特性(一):let const 箭头函数

本文深入探讨了JavaScript中let和const的特性和用法,包括它们的块级作用域、变量不提升、不允许重复声明等共性特点,以及各自特有的暂时性死区、值类型不可改动等特性。此外还介绍了箭头函数的灵活用法及其特性。
摘要由CSDN通过智能技术生成

let 和 const

作为代替var的两个变量。

他们具有以下共同点:

  • 变量不提升

  • 不允许重复声明

  • 块级作用域

let具有自己独特的特性:暂时性死区

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

下面的代码,因为块内声明了let变量tmp,tem绑定了这个块。因此tmp变量声明前对变量赋值时,并没有按照常识,赋值给外层,而是报错。

var tmp = 123;

if (true) {
  tmp = 'abc'; // tmp is not defined
  let tmp;
}

const具有自己独特的特性:

  • 值类型的数据不可改动

  • 引用类型,指针不可改动,内部可改动

  • 声明const同时必须初始化(因为要锁定内存位置)

创建完全不可改动const

实际和const无关,换成var依然无法修改

Object.deepFreeze = function(obj) {
    var propNames = Object.getOwnPropertyNames(obj)
    propNames.forEach(function(name) {
        var prop = obj[name]
        if (typeof prop == 'object' && prop != null) {
            Object.deepFreeze(prop)
        }
    })
    return Object.freeze(obj)
}

const a = Object.deepFreeze({a:1,b:{c:2}})

箭头函数

一种更灵活的方式去声明一个函数,并且具有明确的不可改变的this指向

不同的声明方式:

以下为根据参数数量不同,以及语句数量不同来以不同的方式声明箭头函数

根据参数数量不同:

// 零个参数
const zero = () => {…}

// 一个参数
const one = arg => {…}

// 多个参数
const n = (arg1, arg2, …argn) => {...}

根据语句数量不同:

// 一条语句(一条语句默认行为:返回值为该语句执行结果)
const one = (arg1,arg2) => arg1 + arg2

// 如果是一条语句,且返回的是个对象字面量
const oneJson = arg => ({ a:arg })

// 多条语句(可以没有返回值)
(arg1,arg2) => {
  alert(arg1 + arg2)
}

不同的参数对象引用方式

const headAndTail = (head, ...tail) => [head, tail];

headAndTail(1, 2, 3, 4, 5);

// [1,[2,3,4,5]]

两个特性

  • this锁定了父级作用域的上下文,不是调用时当前作用域上下文。且不能用apply、call、bind去改变。所以当对this的指向有明确的指向时应避免使用箭头函数。例如vue的计算属性等。

// 锁定为上一层对象
a = 2
const obj = {
    a: 1,
    b: () => console.log(this.a)
}
obj.b()
// 2

// 不能改变
obj.b.call(obj)
// 2
  • 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值