Skip to content

函数 is 对象

js
typeof (() => {}); // 'function'

(() => {}) instanceof Object; // true

js 并没有 function 这种类型。

function 的本质是 object。

name

js
function sayHi() {
  alert("Hi");
}
sayHi.name; // sayHi

方法

js
let user = {
  sayHi() {},
};

user.sayHi.name; // sayHi

匿名函数

js
(function () {}).name; // ''

length

入参 的数量

js
function f2(a, b) {}
f2.length; // 2

function f3(a, b, ...more) {}
f3.length; // 2 !!!

需要注意!rest params 并不计算在其中!!!

而且这只是函数的定义,并非运行时的实际情况!

例:代替闭包

js
function makeCounter() {
  // 不需要这个了
  // let count = 0

  function counter() {
    return counter.count++;
  }

  counter.count = 0;

  return counter;
}

闭包的作用域仅自己可用。

这个拥有 对象索引 就可以修改。

NFE / Named Function Expression / 命名函数表达式

也就是主动命名

js
const func = function 大王叫我来巡山() {};

console.log(func.name); // 大王叫我来巡山