前端面试必知(JS)|【前端面试必知】ES6中函数新增了哪些扩展

前言

【前端面试必知(JS)|【前端面试必知】ES6中函数新增了哪些扩展】本系列主要整理前端面试中需要掌握的知识点。本节介绍ES6中函数新增的扩展。

文章目录
  • 前言
  • 一、参数
  • 二、属性
    • 1、length属性
    • 2、name属性
  • 三、作用域
  • 四、严格模式
  • 五、箭头函数

一、参数
  • 允许为函数的参数设置默认值
  • 函数的形参是默认声明的,不能使用let或const再次声明
  • 参数默认值可以与解构赋值的默认值结合起来使用
  • 参数默认值应该是函数的尾参数,如果不是非尾部的参数设置默认值,实际上这个参数是没法省略的
二、属性 1、length属性
  • length将返回没有指定默认值的参数个数;
  • rest 参数也不会计入length属性;
  • 如果设置了默认值的参数不是尾参数,那么length属性也不再计入后面的参数了
2、name属性
  • name属性返回该函数的函数名;
  • 如果将一个具名函数赋值给一个变量,则 name属性都返回这个具名函数原本的名字;
  • Function构造函数返回的函数实例,name属性的值为anonymous;
  • bind返回的函数,name属性值会加上bound前缀
三、作用域 一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。
let x = 1; function f(y = x) { // 等同于 let y = x let x = 2; console.log(y); }f() // 1

四、严格模式 只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错
// 报错 function doSomething(a, b = a) { 'use strict'; // code }// 报错 const doSomething = function ({a, b}) { 'use strict'; // code }; // 报错 const doSomething = (...a) => { 'use strict'; // code }; const obj = { // 报错 doSomething({a, b}) { 'use strict'; // code } };

五、箭头函数
  • 如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分;
  • 如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回;
  • 如果返回对象,需要加括号将对象包裹
var f = v => v; // 等同于 var f = function (v) { return v; }; var f = () => 5; // 等同于 var f = function () { return 5 }; var sum = (num1, num2) => num1 + num2; // 等同于 var sum = function(num1, num2) { return num1 + num2; }; var sum = (num1, num2) => { return num1 + num2; }let getTempItem = id => ({ id: id, name: "Temp" });

注意:
  • 不改变this 的指向
  • 不能做构造函数
  • 不能使用arguments对象
  • 不可以使用yield命令

    推荐阅读