箭头函数

// 用法:

   // function show (argument) {
    // 	console.log("242燃烧弹")
    // }
    // 同等于:
    let show = () => {
        console.log("242燃烧弹")
    }
    // 箭头函数的特点:
    // 1.箭头函数不会有创建自己的this,所以箭头函数会在定义时找到自己外层的 this,并继承这个 this 的值。在后面的任何操作中,this 的值都不会改变。
    var a = 1;

    function fun() {
        var a = 4;
        setTimeout(() => {
            console.log(this.a)
        }, 1000)
    }
    console.log(fun()) //1
    // 通过call改变了fun的this指向{a:2}
    console.log(fun.call({ a: 2 })) //2

// setTimeout 使用的是箭头函数,所以this在定义的时候就确定了,继为外层 func 的 this
的值。在函数执行的时候,通过 call 改变了 fun 的 this 指向 {a:2}(注意:不是this函数的指向改变了),
所以箭头函数继承 func 在执行环境中的指向,所以打印输出2。

// 2.不能定义对象方法

let obj = {
    name: 'lisi',
    a: function() {
        console.log(this.name);
    },
    b: () => {
        console.log(this.name);
        // this.a();//会报错,因为window中没有a函数
    }
}

let name = "zhangsan";
console.log(obj.a()); //lisi//a函数中的this指向的是obj中的name
console.log(obj.b()) //这时b函数中的this指向的是window

// 3.箭头函数不能当作构造函数

//     function Person(name, age) {
//         this.age = age;
//         this.name = name;
//     }
//     let person = new Person('lisi', 23);
//     console.log(person.name, person.age);
//     //lisi 23
//        let Person = (name, age) => {
//     this.name = name;
//     this.age = age;
// }
// let person = new Person('lisi', 23);
// console.log(person.name, person.age);
//Uncaught SyntaxError: Identifier 'Person' has already been declared

//
原因:在new生成一个新的势力对象的时候,首先在内部生成有个空的新对象,再自动设置对象的_proto_继承构造函数,然后新对象去调用构造函数,让构造函数中的this指向新对象,但箭头函数没有自己的this指向,故而就不会指向新对象,所以箭头函数不能做构造函数

// 4.箭头函数 this 的指向不会因为 call()、bind()、apply() 而改变:

 var hahah = 'aahjkfb';
 let funct = () =>{
 	var hahah = "2143242"
 	console.log(this.hahah);
 }
 console.log(funct.bind({hahah:true})())
 console.log(funct.apply({hahah:false}))
 console.log(funct.call({hahah:"igdfusfjsdgfa"}))
 // 以上所有的输出结果都还是:aahjkfb,且不报错。箭头函数不能使用 arguments、super、new.target因为箭头函数的this指向始终还是指向window

// 5.箭头函数没有自己的原型

   // 由于箭头函数没有自己的this指向,不可能指向原型,所以箭头函数没有自己的原型
   let sayHIll =()=>{
   	console.log("Hello Word");
   }
   console.log(sayHIll.prototye)//undefined
   // 6.箭头函数不能使用 arguments、super、new.target
   // 在ES6中可以使用rest参数代替arguments来访问函数的参数列表
   let showwhat=(...ags)=>{
   	console.log(ags)
   }
   showwhat(23,423,34,546,657,)// [23, 423, 34, 546, 657]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值