校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > js语言和框架 > 箭头函数和this
题目

说一说es6中箭头函数?

解答

【得分点】

没有this、this是从外部获取、不能使用new、没有arguments、没有原型和super

【参考答案】

标准回答

箭头函数相当于匿名函数,简化了函数定义。箭头函数有两种写法,当函数体是单条语句的时候可以省略{}和return。另一种是包含多条语句,不可以省略{}和return。

箭头函数最大的特点就是没有this,所以this是从外部获取,就是继承外部的执行上下文中的this,由于没有this关键字所以箭头函数也不能作为构造函数, 同时通过 call() 或 apply() 方法调用一个函数时,只能传递参数(不能绑定this),第一个参数会被忽略。箭头函数也没有原型和super。不能使用yield关键字,因此箭头函数不能用作 Generator 函数。不能返回直接对象字面量。

加分回答

箭头函数的不适用场景:

· 定义对象上的方法

当调用 dog.jumps 时,lives 并没有递减。因为 this 没有绑定值,而继承父级作用域。

var dog = {

lives: 20,

jumps: () => {

this.lives--;

}

}

· 不适合做事件处理程序

此时触发点击事件,this不是button,无法进行class切换

 var button = document.querySelector('button');

button.addEventListener('click', () => {

this.classList.toggle('on');

});

箭头函数函数适用场景:

· 简单的函数表达式,内部没有this引用,没有递归、事件绑定、解绑定,适用于map、filter等方法中,写法简洁

var arr = [1,2,3];

var newArr = arr.map((num)=>num*num)

· 内层函数表达式,需要调用this,且this应与外层函数一致时

let group = {

title: "Our Group",

students: ["John", "Pete", "Alice"],

showList() {

this.students.forEach(

student => alert(this.title + ': ' + student)

);

}

};

group.showList();

【延伸阅读】

箭头函数两种使用语法

var fn1 = num => num*num;

var fn2 = (num1,num2) => { return num1+num2;}

箭头函数没有自己的arguments 对象,这不一定是件坏事,因为箭头函数可以访问外围函数的 arguments 对象:

 function constant() {

return () => arguments[0]

}

var result = constant(1);

console.log(result());// 1

箭头函数访问自己的参数,可以通过命名参数或者rest 参数的形式访问参数:

let nums = (...nums) => nums;

不能使用new关键字,使用报错

var Foo = () => {};

var foo = new Foo();// TypeError: Foo is not a constructor

prototype属性为undefined

var Foo = () => {};

console.log(Foo.prototype);// undefined

不能直接返回对象字面量,用params => {object:literal}这种简单的语法返回对象字面量是行不通的。

var func = () => { foo: 1 };

// Calling func() returns undefined!



var func = () => { foo: function() {} };

// SyntaxError: function statement requires a name

这是因为花括号({} )里面的代码被解析为一系列语句(即 foo 被认为是一个标签,而非对象字面量的组成部分)。

所以,记得用圆括号把对象字面量包起来:

var func = () => ({foo: 1});


C 0条回复 评论

帖子还没人回复快来抢沙发