Skip to content

Instantly share code, notes, and snippets.

const App = () => {
const [showModal, setShowModal] = useState(false);
const handleKeyup = e => e.keyCode === 27 && setShowModal(false);
const toggleModal = () => setShowModal(!showModal);
useEffect(() => {
if (showModal) window.addEventListener('keyup', handleKeyup);
return () => window.removeEventListener('keyup', handleKeyup);
});
return <div onClick={toggleModal} className="App">
const Modal = ({children}) => <div className='Modal'>
{children}
</div>;
function factorial(n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
console.log(factorial(5)); // 120
function recursiveFn(n) {
if (n < 0) return true;
recursiveFn(n - 1);
}
recursiveFn(100000); // RangeError: Maximum call stack size exceeded
function traverseDOM(tree) {
if (isLeaf(tree)) tree.className = 'leaf';
else for (const leaf of tree.childNodes) traverseDOM(leaf);
}
function trampoline(f) {
return function trampolined(...args) {
let result = f.bind(null, ...args);
while (typeof result === 'function') result = result();
return result;
};
}
const factorial = trampoline(function _factorial(n, acc = 1) {
if (n <= 1) return acc;
return () => _factorial(n - 1, n * acc);
});
console.log(factorial(5));
const recursiveFn = trampoline(function _recursiveFn(n) {
if (n < 0) return;
return () => _recursiveFn(n - 1);
});
recursiveFn(100000);
console.log('No range error!');
interface ColumnOfStrings {
_id: string; // MongoDB id field
type: 'string'; // yes, it is literal 'string' for column of strings
values: (string | null)[]; // an array, each element is either string or null
}
function compress(column) {
column.compression = 'ZIP_JSON_STRINGIFY';
column.values = zip(JSON.stringify(column.values));
return column;
}