Test case details

Preparation Code

<p>Just how <em>slow</em> are closures?</p>
function fn(data) { if (data.x < 10) { return data.y * 30 / (data.x + 10); } if (data.x < 20) { return (data.y / data.x) } return data.y * 100 / (data.x / 10) } let dataList = new Array(100) for (let i = 0; i < dataList.length; i++) { let x = Math.ceil(Math.random() * 50) let y = Math.ceil(Math.random() * 200) dataList[i] = { x, y } }

Test cases

Test #1

function doit(fnParam) { fnParam() } for (let i = 0; i < dataList.length; i++) { (() => fn(dataList[i]))() }

Test #2

function doit(bundle) { bundle.fn(bundle.data) } for (let i = 0; i < dataList.length; i++) { let data = dataList[i] doit({fn, data}) }

Test #3

dataList.forEach((x)=>fn(x));

Test #4

dataList.forEach(fn)