ES6(七: 函数扩展)(name,箭头,函数绑定,尾调用优化)

本文详细介绍了ES6中函数的扩展,包括name属性的变化、箭头函数的特性和陷阱,以及函数绑定和尾调用优化的概念。特别是箭头函数不绑定this、无法作为构造函数、不能使用arguments对象等特点。此外,文章还探讨了尾调用优化对于递归操作的重要性,并提供了两种实现尾递归的方案。
摘要由CSDN通过智能技术生成

前言

对于js这种本身对面向对象(oo)支持不是特别好的,而且社区也在吐槽面向对象方式的各种弊端,反之,函数式编程正在大火,一方面得益于react火热,另一方面,另一方面这也是一种新的解决方案,可想而知,函数的地位举足轻重。

(一)name属性

函数的name 属性,返回该函数的函数名。

function foo() {
   }
console.log(foo.name); // "foo"

var func1 =  () => {};
// 只看ES6的情况
console.log(func1.name); // "func1"

// 构造函数实例
const name = (new Function).name;
console.log(name); // anonymous

需要注意的是, ES6对这个属性的行为做出了一些修改。如果将一个匿名函数赋值给一个变量, ES5的name 属性,会返回空字符串,而ES6的name 属性会返回实际的函数名。

Function 构造函数返回的函数实例, name 属性的值为“anonymous”。

bind 返回的函数, name 属性值会加上“bound ”前缀。

const name1 = foo.bind({}).name;
console.log(name1); // "bound foo"

const name2 = (function(){}).bind({}).name;
console.log(name2);  // "bound "

(二)箭头函数

// 基本用法 箭头返回有括号返回必加return
const func = () => { return 5;}

// 等同于上面返回5
const func1 = () => 5;

// 当一个参数时候,形参括号可省略
const func2 = x => x*2;

// 如果箭头函数返回的是对象,可以用括号包含对象的方式解决
const func3 = x => ({
  x: x*2, y: '测试'});

// 当箭头函数的代码块部分多于一条语句,必须使用大括号
const func4 = x => { x++; return x*2;};

// 箭头函数配合变量解构使用
const func5 = ({name,age}) => `name:${name},age: ${age}`;

// 箭头函数配合rest参数
const func6 = (...nums) => nums;

console.log(func());   // 5
console.log(func1());  // 5
console.log(func2(3)); // 6
console.log(func3(3)); // { x: 6, y: '测试' }
console.log(func4(3)); // 8
console.log(func5({
  name: '张三',age: '18'})); // 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值