# Check if a value is a function

True for anything callable: functions, arrows, async and generator functions, classes.

Canonical: https://1loc.dev/function/check-if-a-value-is-a-function/
Version: 1.0.0
Runtime: JavaScript · Node.js 22 / modern browsers
Verification: Usage lines executed in Node.js 22 and headless Chromium; no external services
Updated: 2026-10-28

## Implementation

```javascript
function isFunction(value) { return typeof value === 'function'; }
```

## Usage

```javascript
isFunction(function () {}); // → true
isFunction(async () => {}); // → true
isFunction(function* () {}); // → true
isFunction(class Mailer {}); // → true
isFunction(Promise.resolve(1)); // → false
```

Lines marked → were executed in Node.js 22 and in headless Chromium, and each result was compared with the value shown. Lines marked e.g. are illustrative.

## Limits

- The original also returned true for a Promise, which is not callable. typeof is the reliable test, as the last line shows.
- Classes are functions too: typeof cannot tell whether calling without new will throw.

The function does not validate its arguments. Add checks where it receives untrusted input.

## Source and license

Original: https://github.com/phuocng/1loc/blob/14b481cf60dff1620ab1bb99a43b1f68068cdd9b/contents/check-if-a-value-is-a-function.mdx
Author: Nguyen Huu Phuoc and original contributors
Contributors: See original repository history
Source commit: 14b481cf60dff1620ab1bb99a43b1f68068cdd9b
Copyright (c) 2020 phuoc-ng
License: MIT — https://1loc.dev/licenses/
Maintainer: Oveyon
Modifications: Uses typeof; the original also returned true for a Promise. Documented as a reference with executed usage lines. Original MDX retained as inert source evidence.
