@musicnothing is fully correct, the this binding is different between the two different calls to fn.
However, there still seems to be some confusion as to the reasoning for why arguments is now the this target which I will address.
thisMDN bindings are held inside of Execution ContextsECMA, which are essentially what manages scope in JavaScript.
When a function is called, an arguments object is constructed. The arguments object has its own Execution Context, which means it has its own this binding, its own Variable Environment, and its own Lexical Environment. When constructed, the arguments object values are stored in its Variable Environment, making any references from that point relative to the arguments object's Execution Context.
By design, the arguments object is array-like, which basically means it agrees to have a length property, and more vaguely that accessing an index which is less than the length property should have a value. As a result you can access its value references with indexes through a facade, however, it is important to keep in mind where they are scoped to at that point.
0function of thrargumentsobject. So thats similar toa.b()werebis called inas context. Still interesting...arguments[0]does not hold a reference to the functionfndeclared before it's limited to it's own scope wherethisrefers to theargumentsarray.