is-fun

Checks whether given variable is callable. Works fine function and generators in spite of ES6 @@toStringTag

Usage no npm install needed!

<script type="module">
  import isFun from 'https://cdn.skypack.dev/is-fun';
</script>

README

is-fun

Yes! One more package detecting that given variable is function.
Made as drop-in replacement for is-callable package, but lighter and faster

Install it via npm or yarn

npm install is-fun
# or via yarn
yarn add is-fun

Use it wherever and however you want - node.js or webpack, CJS or ESM modules!

const isFun = require("is-fun");

isFun(() => {}); // true
import isFun from "is-fun";

isFun(undefined); // false
isFun(null); // false
isFun(false); // false
isFun(true); // false
isFun([]); // false
isFun({}); // false
isFun(/a/g); // false
isFun(new RegExp("a", "g")); // false
isFun(new Date()); // false
isFun(42); // false
isFun(NaN); // false
isFun(Infinity); // false
isFun(new Number(42)); // false
isFun("foo"); // false
isFun(Object("foo")); // false

isFun(function() {}); // true
isFun(function*() {}); // true
isFun(x => x * x); // true

Performance (recent benchmarks results)

benchmarks ran on 3.4GHz Core i7 CPU width 16GB DDR4 RAM

npm run build && npm i -C benchmark && npm -C benchmark start
# Regular function
is-callable   × 3,679,405 ops/sec; (result: "true")
is-fun        × 6,736,726 ops/sec; (result: "true")

# Fake function
is-callable   × 45,630 ops/sec; (result: "false")
is-fun        × 112,172 ops/sec; (result: "false")

# Typed array constructor
is-callable   × 1,692,920 ops/sec; (result: "true")
is-fun        × 2,716,742 ops/sec; (result: "true")

# Class constructor
is-callable   × 7,058,944 ops/sec; (result: "false")
is-fun        × 7,109,810 ops/sec; (result: "false")

# Arrow function
is-callable   × 95,493,127 ops/sec; (result: "true")
is-fun        × 89,843,495 ops/sec; (result: "true")

# Null
is-callable   × 124,068,441 ops/sec; (result: "false")
is-fun        × 126,135,930 ops/sec; (result: "false")

# Number
is-callable   × 863,066,938 ops/sec; (result: "false")
is-fun        × 863,418,881 ops/sec; (result: "false")