es6let和const还有箭头函数

es6let和const跟var的区别?

1.变量提升问题

  • 在es5中var存在变量提升的问题(将变量提升到作用域的最顶部)。即变量可以在生病之前调用值问未定义(undefined)
  • let和const不存在变量提升。即它们所声明的变量一定在声明后使用,否则报ReferenceError的粗

2.暂时性死区

let和const都存在暂时性死区。即只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域不受外部的影响。

在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上称为“暂时性死区”。

总之,暂时性死区的本质就是,只要进入当前作用域,所要使用的变量就已经存在了,但是不可获取。

3.不能重复声明

  • var允许重复声明变量
  • let和const不能重复声明变量

4.作用域不同

什么是块级作用域:
ES5中作用域有:全局作用域、函数作用域。没有块作用域的概念。因此也有一系列的问题。

  • var 不存在块级作用域
  • let和const存在块级作用域

5.修改变量

  • var和let可以。
  • const声明一个只读的常量。一旦声明,常量的值就不能改变。const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

一、箭头函数和普通函数的区别

1.箭头函数是匿名函数,不能作为构造函数,不能使用new

let  fun =()=>{
console.log("我是箭头函数")
}
function fun(){
    consloe.log("我是普通函数")
}

箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式:一种只包含一个表达式,连{ … }和return都省略掉。还有一种可以包含多条语句,这时候就不能省略{ … }和return。

不能作为构造函数,不能使用new

二、箭头函数内没有arguments,可以用展开运算符…解决

function A(a){
    console.log(arguments)
}
A(1,2,3,4,5)
let B=(b)=>{
    console.log(arguments)
}
B(2,5,64,4,6)
let c=(...c)=>{
    console.log(c)
}
c(2,569,5,56,54,21,23)

虽然arguments对象并不是一个数组(类数组),但是访问单个参数的方式与访问数组元素的方式相同

三、箭头函数的this,始终指向父级上下文(箭头函数的this取决于定义位置父级的上下文,跟使用位置没关系,普通函数this指向调用的那个对象)

var a=200
let obj={
    a:100,
    fn:function(){
        console.log(this.a);//es5 谁调用this指向谁
    },
    foo:()=>{
          console.log(this.a);//es6箭头函数的this指向父级(obj)上下文
    }
}
obj.fn()
obj.foo()

四、箭头函数不能通过call() 、 apply() 、bind()方法直接修改它的this指向。(call、aaply、bind会默认忽略第一个参数,但是可以正常传参)

let obj={
    a:10
    b:function(n){
        let f=(n)=> n+this.a;
        return f(n)
    },
    c:function(n){
        let f=(n)=> n+this.a;
        let m={
            a:20
        };
        return f.call(m,n)
    },     
};
console.log(obj.b(1));//11
console.log(obj.c(1));//因为call无法改变this指向所以还是11

五、箭头函数没有原型属性

箭头函数里面没有prototype;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值