27 lines
678 B
Markdown
27 lines
678 B
Markdown
### once
|
|
|
|
Ensures a function is called only once.
|
|
|
|
Utilizing a closure, use a flag, `called`, and set it to `true` once the function is called for the first time, preventing it from being called again.
|
|
Allow the function to be supplied with an arbitrary number of arguments using the spread (`...`) operator.
|
|
|
|
```js
|
|
const once = fn => {
|
|
let called = false;
|
|
return (...args) => {
|
|
if (!called) {
|
|
fn(...args);
|
|
called = true;
|
|
}
|
|
};
|
|
};
|
|
```
|
|
|
|
```js
|
|
const startApp = event => {
|
|
// initializes the app
|
|
console.log(event); // access to any arguments supplied
|
|
};
|
|
document.addEventListener('click', once(startApp)); // only runs `startApp` once upon click
|
|
```
|