webVueBlog/Leetcode

【深入理解JS核心技术】12. 什么是一阶函数

webVueBlog opened this issue · 0 comments

一阶函数是一个不接受另一个函数作为参数并且不返回函数作为其返回值的函数。

const firstOrder = () => console.log("I am a first order function!");

函数名

函数名就是指向函数的指针,一个函数可以有多个名称。

function sum(num1, num2) { 
 return num1 + num2; 
} 

console.log(sum(10, 10)); // 20 

let anotherSum = sum; 
console.log(anotherSum(10, 10)); // 20 

sum = null; 
console.log(anotherSum(10, 10)); // 20

ECMAScript6的所有函数对象都会暴露一个只读的name属性,其中包含关于函数的信息。多数情况下,这个属性中保存的就是一个函数标识符,或者说是一个字符串化的变量名。即使函数没有名称,也会如实显示成空字符串。如果它是使用Function构造函数创建的,则会标识成“anonymous".

function foo() {} 
let bar = function() {}; 
let baz = () => {}; 

console.log(foo.name); // foo 
console.log(bar.name); // bar 
console.log(baz.name); // baz 
console.log((() => {}).name); //(空字符串)
console.log((new Function()).name); // anonymous

如果函数是一个获取函数,设置函数,或者使用bind()实例化,那么标识符前面会加上一个前缀。

function foo() { }
console.log(foo.bind(null).name); // bound foo
let dog = {
 years: 1,
 get age() {
  return this.years;
 },
 set age(newAge) {
  this.years = newAge;
 }
}
let propertyDescriptor = Object.getOwnPropertyDescriptor(dog, 'age');
console.log(propertyDescriptor.get.name); // get age
console.log(propertyDescriptor.set.name); // set age
console.log(Object.getOwnPropertyDescriptor(dog, 'years'))

VM2829:1 
{value: 1, writable: true, enumerable: true, configurable: true}
configurable: true
enumerable: true
value: 1
writable: true

未完结!更多内容尽情期待下一节~

【深入理解JS核心技术】欢迎各位观众老爷,求点赞,求关注,求转发~