MDN dice di arrow functions:
Rapporti con modalità rigorosa
Dato che this
è lessicale, rigide regole della modalità in materia di this
vengono semplicemente ignorati.
var f =() => {'use strict'; return this};
f() === window; // or the global object
Le regole lessicali this
hanno la precedenza rispetto rigoroso-mode this
regole.
Lo vediamo facilmente nella specifica ES2015 esaminando la descrizione piana inglese di possibili valori per a function's [[ThisMode]]
slot, che può essere lexical
, strict
o global
:
Definisce come this
riferimenti vengono interpretati nel parametri formali e codice del corpo della funzione. lexical
significa che this
si riferisce al valore this
di una funzione di inclusione lessicale. strict
significa che il valore this
viene utilizzato esattamente come previsto da una chiamata della funzione. global
significa che un valore this
di undefined
viene interpretato come riferimento all'oggetto globale.
In altre parole, il comportamento di una funzione this
può essere rigoroso, non rigido o lessicale. Se la funzione [[ThisMode]]
è lessicale (come per una funzione freccia), rende irrilevante lo stato severo/non rigoroso della funzione allo scopo di determinare il comportamento di impostazione this
.
Poiché si sta eseguendo questo nell'ambito globale (dove 'this' è l'oggetto' window'), e 'this' nelle funzioni freccia è lessicale, non vedo cosa c'è di inaspettato in questo? – Bergi