{"ScriptPreparationCode":"class TestClass {\r\n ctx = {index: 0};\r\n\r\n constructor(ctx) {\r\n this.ctx = ctx;\r\n }\r\n\r\n callback() {\r\n this.ctx.index \u002B= 1;\r\n console.log(this.ctx.index);\r\n }\r\n}\r\n\r\nfunction testFunction() {\r\n this.ctx.index \u002B= 1;\r\n console.log(this.ctx.index);\r\n}\r\n\r\nfunction useTestFunction(ctx) {\r\n return () =\u003E {\r\n ctx.index \u002B= 1;\r\n console.log(ctx.index);\r\n }\r\n}\r\n\r\ndocument.addEventListener(\u0027test1\u0027, () =\u003E {\r\n console.clear();\r\n\r\n const ctx = {index: 0};\r\n while (ctx.index \u003C 100000) {\r\n const item = new TestClass(ctx);\r\n item.callback();\r\n }\r\n});\r\n\r\ndocument.addEventListener(\u0027test2\u0027, () =\u003E {\r\n console.clear();\r\n\r\n const ctx = {index: 0};\r\n while (ctx.index \u003C 100000) {\r\n const callback = testFunction.bind({ctx});\r\n callback();\r\n }\r\n});\r\n\r\ndocument.addEventListener(\u0027test3\u0027, () =\u003E {\r\n console.clear();\r\n\r\n const ctx = {index: 0};\r\n while (ctx.index \u003C 100000) {\r\n const callback = useTestFunction(ctx);\r\n callback();\r\n }\r\n});\r\n\r\ndocument.addEventListener(\u0027test4\u0027, () =\u003E {\r\n console.clear();\r\n\r\n const ctx = {index: 0};\r\n const item = new TestClass(ctx);\r\n while (ctx.index \u003C 100000) {\r\n item.callback();\r\n }\r\n});","TestCases":[{"Name":"Class","Code":"document.dispatchEvent(new CustomEvent(\u0027test1\u0027));","IsDeferred":false},{"Name":"Bind","Code":"document.dispatchEvent(new CustomEvent(\u0027test2\u0027));","IsDeferred":false},{"Name":"Hook","Code":"document.dispatchEvent(new CustomEvent(\u0027test3\u0027));","IsDeferred":false},{"Name":"Class (reused)","Code":"document.dispatchEvent(new CustomEvent(\u0027test4\u0027));","IsDeferred":false}]}