前言
对于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'})); //