In Node.js, all'interno di un callback passato a setTimeout()
, this
sembra essere legato alla timeoutObject
restituito da setTimeout()
sé (sia in modalità rigorosa e non modalità rigorosa):!Il legame di `this` in un callback setTimeout() in Node.js
var timeoutObject = setTimeout(function() {
console.log(this === timeoutObject); // true
}, 0);
var timeoutObject = setTimeout(function() {
'use strict';
console.log(this === timeoutObject); // true
}, 0);
Questo non è il caso nel browser, dove this
è legato (come mi sarei aspettato) all'oggetto globale window
(o è undefined
, in modalità rigorosa).
La documentazione non dice nulla su questo comportamento non standard.
Perché è questo?
Cosa c'è di sbagliato in questo? – Bergi
Ho fatto notare quello che penso sia sbagliato in questo. Mi aspetterei che questo sia legato all'oggetto globale, come in ogni altro callback. Tutti i browser associano 'this' all'oggetto globale, mentre Node.js no. – kYuZz
Hm, il nodo non è un browser e non ha bisogno di ripetere gli errori di vecchi che erano [codificati con HTML5] (http://www.w3.org/TR/html5/webappapis.html#dom-windowtimers-settimeout). L'utilizzo dell'oggetto globale è piuttosto disprezzato nel nodo, quindi perché chiamare la richiamata su di esso?Il rispettivo timer (che non è un numero, ma ha i suoi metodi) ha molto più senso. – Bergi