ES6里面关于箭头函数的一些问题

箭头函数

// 传统模式
var fn = function (a, b) {
    [a, b] = [b, a];
    return `a = ${a},b = ${b}`;
}
var a = fn(2,3);
console.log(a);

// ES6写法
const fn1 = (a,b) =>{
    [a, b] = [b, a];
    return `a = ${a},b = ${b}`;
}
const b = fn1(2,3);
console.log(a);

注意事项:
1、箭头函数如果只有一个参数,就可以省略(): const a = x =>{}
2、箭头函数如果只有一条返回语句,没有其他语句,那么可以省略{}const add = (a,b){a + b}
3、箭头函数中没有this,argument,new.target,如果要强行使用,则指向函数外层对应的this,argument,new.target
4、箭头函数没有原型,所有说占用空间非常小,不能当成构造函数来使用

() => return 'hello'
(a, b) => a + b
(a) => {
  a = a + 1
  return a
}

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

this指向问题
ES5以前的this的指的是函数的调用对象,
ES6的this指向函数被定义时的

语法:去掉function(){}之间加上=>var a = (...参数) => {}

const btn = document.getElementsByTagName('button')[0];
// 传统模式会报错因为当时的this指向window
btn.onclick = function(){
    setInterval(function(){
        console.log(this)//window
        this.style.backgroundColor = `rgb(${(Math.random() * 255) | 0},${(Math.random() * 255) | 0},${(Math.random() * 255) | 0})`;
    }.bind(this),3000);
}

// 箭头函数的this指向是不会更改的
btn.onclick = function(){
    setInterval(() =>{
        console.log(this)//btn
        this.style.backgroundColor = `rgb(${(Math.random() * 255) | 0},${(Math.random() * 255) | 0},${(Math.random() * 255) | 0})`;
    },3000);
}

函数的特点:
1.箭头函数this为父作用域的this,不是调用时的this
箭头函数的this永远指向其父作用域,任何方法都改变不了,包括call,apply,bind。
普通函数的this指向调用它的那个对象。
2. 箭头函数不能作为构造函数,不能使用new
3. 箭头函数没有 this argument new.target
4. 应用:临时使用,并不会可以调用,异步处理函数事后处理

在 JavaScript 中,我们可以使用对象字面量来定义对象,例如: ``` const obj = { name: 'John', age: 30, job: 'developer' }; ``` 这种方式虽然简单,但有时可能无法满足我们的需求。如果我们想要在对象中定义一些方法,以便在其他地方调用,我们可以使用函数来实现。例如: ``` const obj = { name: 'John', age: 30, job: 'developer', sayHello: function() { console.log('Hello, my name is ' + this.name + '.'); } }; ``` 这样我们就定义了一个对象 obj,其中包含了一个名为 sayHello 的方法。我们可以在其他地方调用这个方法,例如: ``` obj.sayHello(); // 输出 "Hello, my name is John." ``` 另一方面,箭头函数ES6 中的新特性,它们可以简化函数的书写,并且具有简洁的语法。在箭头函数中,可以使用对象字面量来定义对象,例如: ``` const obj = () => ({ name: 'John', age: 30, job: 'developer' }); ``` 这里的箭头函数返回了一个对象字面量,其中包含了三个属性。需要注意的是,如果箭头函数直接返回一个对象字面量,而不加括号,那么解析器会将大括号解析为函数体的大括号,而不是对象字面量的大括号。因此,为了避免这种情况,我们需要在对象字面量外面加上一个小括号,表示返回的是一个对象字面量。 综上所述,我们不一定非得在 JavaScript 中使用箭头函数来定义对象,可以使用传统的对象字面量和函数来实现。但是,如果我们想要使用简洁的语法来定义对象,可以考虑使用箭头函数来返回对象字面量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值