JSFiddle - React, Tailwind, and code Playground
HTML
<button id="stop">Stop</button>Argument length limit: <span id="result">…</span>
JavaScript
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply#Using_apply_and_built-in_functions
// https://bugs.webkit.org/show_bug.cgi?id=80797
var argsLength = 1,
argsMin = 1,
argsMax,
interval,
span = document.getElementById('result');
function fn() {
return arguments;
}
function stopLoop() {
clearInterval(interval);
}
// IE8- stub
if (!window.console) {
window.console = {
log: function () {}
};
}
function reportError(e) {
console.log('Error on arguments length ' + argsLength + ': ' + e.message);
console.log(e);
}
function check(argsLength) {
var args = [];
args[argsLength - 1] = argsLength;
var result = fn.apply(null, args);
console.log('Result', args.length, result.length);
}
function loop() {
console.log('Try', argsMin, argsLength, argsMax);
try {
check(argsLength);
argsMin = argsLength;
} catch (e) {
argsMax = argsLength;
reportError(e);
}
span.innerHTML = argsMin + '..' + argsMax;
argsLength = argsMax ? ((argsMin + argsMax) / 2) : (argsMin * 2);
if (argsMax && argsMax - argsMin < 2) {
span.innerHTML = argsMin + '';
stopLoop();
}
}
document.getElementById('stop').onclick = stopLoop;
interval = setInterval(loop, 100);