JSFiddle - React, Tailwind, and code Playground

JavaScript

let called = 0

function foo()
{
    console.log( {
        called: called++,
        "this.name": this.constructor.name,
        "this": this,
        "arguments": arguments
  })
}

foo() // called = 0
foo("a", 1, true) // called =1
foo("b", 2, false) // called =2

;(foo.bind( "a", 1, true ))() // called =3
;(foo.bind( "b", 2, false ))() // called =4

foo.apply( "a", [1, true] ) // called =5
foo.apply( "b", [2, false] ) // called =6

;(foo.bind.apply( foo, ["a", 1, true] ))() // 7
;(foo.bind.apply( foo, ["b", 2, false] ))() // 8