2015-09-24 3 views
5

В соответствии с this explanation in MDN:`this` в глобальном контексте и внутри функции

  • в глобальном контексте, this относится к глобальному объекту
  • в контексте функции, если функция вызывается непосредственно, она вновь относится к глобальному объекту

Тем не менее, следующее:

var globalThis = this; 
function a() { 
    console.log(typeof this); 
    console.log(typeof globalThis); 
    console.log('is this the global object? '+(globalThis===this)); 
} 

a(); 

... помещен в файл foo.js производит:

$ nodejs foo.js 
object 
object 
is this the global object? false 
+0

Попробуйте добавить 'console.log (это); console.log (globalThis); 'чтобы увидеть, что они на самом деле являются – mplungjan

ответ

5

В Node.js, любой код, мы пишем в модуле будет обернут в функции. Вы можете узнать больше об этом, в этом detailed answer. Таким образом, на верхнем уровне модуля будет ссылаться на контекст этой функции, а не на глобальный объект.

Вы можете использовать global object, чтобы передать фактический глобальный объект, как это

function a() { 
    console.log('is this the global object? ' + (global === this)); 
} 

a(); 
+0

Учитывая, что' '' вызывается из модуля, но не должно ли оно быть одинаковым внутри и снаружи функции? –

+0

@JamesThorpe 'a' вызывается без какого-либо объекта контекста (' this'). Таким образом, по умолчанию 'this' будет ссылаться только на глобальный объект. – thefourtheye

Смежные вопросы