W node.js, wewnątrz zwrotnego przekazanego setTimeout()
, this
wydaje się być związany z timeoutObject
zwróconej sama setTimeout()
(zarówno w trybie ścisłe i, nie strict mode):Wiązanie `this` w setTimeout() zwrotnego w node.js
var timeoutObject = setTimeout(function() {
console.log(this === timeoutObject); // true
}, 0);
var timeoutObject = setTimeout(function() {
'use strict';
console.log(this === timeoutObject); // true
}, 0);
to nie jest sprawa w przeglądarce, gdzie this
jest związany (jak bym się spodziewał) do obiektu globalnego window
(lub jest undefined
, w trybie ścisłym).
Dokumentacja nie mówi nic o tym niestandardowym zachowaniu.
Dlaczego tak jest?
Co jest nie tak z tym? – Bergi
Zwróciłem uwagę na to, co moim zdaniem jest złe. Spodziewam się, że "to" będzie związane z obiektem globalnym, tak jak w każdym innym wywołaniu zwrotnym. Wszystkie przeglądarki wiążą 'this' z obiektem globalnym, natomiast Node.js nie. – kYuZz
Hm, węzeł nie jest przeglądarką i nie musi powtarzać błędów, które zostały [skodyfikowane za pomocą HTML5] (http://www.w3.org/TR/html5/webappapis.html#dom-windowtimers-settimeout). Korzystanie z obiektu globalnego jest w nim w zasadzie pogardzane, więc po co wywoływać wywołanie zwrotne?Odpowiedni timer (który nie jest liczbą, ale ma własne metody) ma dużo więcej sensu. – Bergi